鱼C论坛

 找回密码
 立即注册
查看: 1433|回复: 6

[已解决]我又迷惑了。。。快来救救我

[复制链接]
发表于 2020-10-29 07:48:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        int i;
        char a[88];
        for(i=0;a[i]!='\0';i++)
        {
                scanf("%c",&a[i]);
                if(a[i]>'a',a[i]<'z') a[i]=a[i]+1;
        }
        printf("%s",a);
        return 0;
}

为啥只输出前三个字符的结果 后边的都不显示?
求解
最佳答案
2020-10-29 10:15:54
本帖最后由 sunrise085 于 2020-10-29 10:18 编辑

你的程序有两个大问题
第一、for循环的条件有问题,数组a没有初始化,每个单元的内容是不确定的,你直接以某一单元为'\0'作为结束循环的条件,问题很大,因为不知道哪一个单元可能会出现'\0',也可能第四个单元就出现了,就像你运行遇到的这种情况,也有可能一直没出现,无限循环,最后程序溢出报错。
第二、if条件有问题,估计你是打算写a【i】为小写字母吧?那么中间应该是&&而不是逗号
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int i=-1;
  5.     char a[88];
  6.     while((a[++i]=getchar())!='\n')
  7.     {
  8.         if(a[i]>'a'&&a[i]<'z') //这里确定不是>=和<=
  9.             a[i]=a[i]+1;
  10.     }
  11.     a[i]='\0';
  12.     printf("%s",a);
  13.     return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-10-29 08:39:31 | 显示全部楼层
1. if(a[i]>'a',a[i]<'z') a[i]=a[i]+1;中间不应该用逗号运算符应该用||
2.
  1.   for(i=0;a[i]!='\0';i++)
  2.         {
  3.                 scanf("%c",&a[i]);
  4.                 if(a[i]>'a',a[i]<'z') a[i]=a[i]+1;
  5.         }//这里的i每次都不一样,你接下来才输入a[i],那你的循环又怎么结束呢?
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-29 08:54:05 | 显示全部楼层
1、第9行,不能用逗号连接并列的两个语句,应该用 &&;
2、第6行,a[i]!='\0' 是一个不可能人为终止的条件(随机?碰巧,有可能),改成 a[i]!='\n' 也一样,因为你后面还有一条加密语句:a[i]=a[i]+1;
3、若输入小写字母 z ,加密后的字符,是个 {
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-29 09:05:59 | 显示全部楼层
本帖最后由 xieglt 于 2020-10-29 09:07 编辑
  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i;
  5.         char a[88];
  6.        
  7.         //首先,循环没有退出条件,
  8.         //因为a[88]没有初始化,而根据下面的代码逻辑,
  9.         //a[i] != '\0' 这个条件永远满足,因此这是一个死循环,最终将导致堆栈被破坏
  10.         for(i=0;a[i]!='\0';i++)
  11.         {
  12.                 scanf("%c",&a[i]);
  13.                 //其次,判断条件不明确,不知道这个判断条件想干什么。
  14.                 //这是个逗号表达式,表达式的结果为最后一个式子的结果
  15.                 //即 a[i] < 'z' 的结果
  16.                 //所以,光看代码,看不出想实现什么?
  17.                //所以,说说原题是什么。
  18.                 if(a[i]>'a',a[i]<'z') a[i]=a[i]+1;

  19.         }

  20.         printf("%s",a);
  21.         return 0;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-29 10:15:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-10-29 10:18 编辑

你的程序有两个大问题
第一、for循环的条件有问题,数组a没有初始化,每个单元的内容是不确定的,你直接以某一单元为'\0'作为结束循环的条件,问题很大,因为不知道哪一个单元可能会出现'\0',也可能第四个单元就出现了,就像你运行遇到的这种情况,也有可能一直没出现,无限循环,最后程序溢出报错。
第二、if条件有问题,估计你是打算写a【i】为小写字母吧?那么中间应该是&&而不是逗号
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int i=-1;
  5.     char a[88];
  6.     while((a[++i]=getchar())!='\n')
  7.     {
  8.         if(a[i]>'a'&&a[i]<'z') //这里确定不是>=和<=
  9.             a[i]=a[i]+1;
  10.     }
  11.     a[i]='\0';
  12.     printf("%s",a);
  13.     return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-29 10:36:51 From FishC Mobile | 显示全部楼层
xieglt 发表于 2020-10-29 09:05

没有原题 我瞎写的。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-29 10:37:53 From FishC Mobile | 显示全部楼层
xieglt 发表于 2020-10-29 09:05

数组初始化怎么才能知道'\0'的位置呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-2 22:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表