我又迷惑了。。。快来救救我
#include<stdio.h>int main()
{
int i;
char a;
for(i=0;a!='\0';i++)
{
scanf("%c",&a);
if(a>'a',a<'z') a=a+1;
}
printf("%s",a);
return 0;
}
为啥只输出前三个字符的结果 后边的都不显示?
求解 1. if(a>'a',a<'z') a=a+1;中间不应该用逗号运算符应该用||
2.for(i=0;a!='\0';i++)
{
scanf("%c",&a);
if(a>'a',a<'z') a=a+1;
}//这里的i每次都不一样,你接下来才输入a,那你的循环又怎么结束呢?
1、第9行,不能用逗号连接并列的两个语句,应该用 &&;
2、第6行,a!='\0' 是一个不可能人为终止的条件(随机?碰巧,有可能),改成 a!='\n' 也一样,因为你后面还有一条加密语句:a=a+1;
3、若输入小写字母 z ,加密后的字符,是个 { 本帖最后由 xieglt 于 2020-10-29 09:07 编辑
#include<stdio.h>
int main()
{
int i;
char a;
//首先,循环没有退出条件,
//因为a没有初始化,而根据下面的代码逻辑,
//a != '\0' 这个条件永远满足,因此这是一个死循环,最终将导致堆栈被破坏
for(i=0;a!='\0';i++)
{
scanf("%c",&a);
//其次,判断条件不明确,不知道这个判断条件想干什么。
//这是个逗号表达式,表达式的结果为最后一个式子的结果
//即 a < 'z' 的结果
//所以,光看代码,看不出想实现什么?
//所以,说说原题是什么。
if(a>'a',a<'z') a=a+1;
}
printf("%s",a);
return 0;
} 本帖最后由 sunrise085 于 2020-10-29 10:18 编辑
你的程序有两个大问题
第一、for循环的条件有问题,数组a没有初始化,每个单元的内容是不确定的,你直接以某一单元为'\0'作为结束循环的条件,问题很大,因为不知道哪一个单元可能会出现'\0',也可能第四个单元就出现了,就像你运行遇到的这种情况,也有可能一直没出现,无限循环,最后程序溢出报错。
第二、if条件有问题,估计你是打算写a【i】为小写字母吧?那么中间应该是&&而不是逗号
#include<stdio.h>
int main()
{
int i=-1;
char a;
while((a[++i]=getchar())!='\n')
{
if(a>'a'&&a<'z') //这里确定不是>=和<=
a=a+1;
}
a='\0';
printf("%s",a);
return 0;
} xieglt 发表于 2020-10-29 09:05
没有原题 我瞎写的。。。 xieglt 发表于 2020-10-29 09:05
数组初始化怎么才能知道'\0'的位置呢?
页:
[1]