头发 发表于 2020-10-29 07:48:05

我又迷惑了。。。快来救救我

#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;
}

为啥只输出前三个字符的结果 后边的都不显示?
求解

吃点饭饭 发表于 2020-10-29 08:39:31

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,那你的循环又怎么结束呢?

风过无痕1989 发表于 2020-10-29 08:54:05

1、第9行,不能用逗号连接并列的两个语句,应该用 &&;
2、第6行,a!='\0' 是一个不可能人为终止的条件(随机?碰巧,有可能),改成 a!='\n' 也一样,因为你后面还有一条加密语句:a=a+1;
3、若输入小写字母 z ,加密后的字符,是个 {

xieglt 发表于 2020-10-29 09:05:59

本帖最后由 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:15:54

本帖最后由 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;
}

头发 发表于 2020-10-29 10:36:51

xieglt 发表于 2020-10-29 09:05


没有原题 我瞎写的。。。

头发 发表于 2020-10-29 10:37:53

xieglt 发表于 2020-10-29 09:05


数组初始化怎么才能知道'\0'的位置呢?
页: [1]
查看完整版本: 我又迷惑了。。。快来救救我