鱼C论坛

 找回密码
 立即注册
查看: 1214|回复: 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】为小写字母吧?那么中间应该是&&而不是逗号
#include<stdio.h>
int main()
{
    int i=-1;
    char a[88];
    while((a[++i]=getchar())!='\n')
    {
        if(a[i]>'a'&&a[i]<'z') //这里确定不是>=和<=
            a[i]=a[i]+1;
    }
    a[i]='\0';
    printf("%s",a);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-29 08:39:31 | 显示全部楼层
1. if(a[i]>'a',a[i]<'z') a[i]=a[i]+1;中间不应该用逗号运算符应该用||
2.
  for(i=0;a[i]!='\0';i++)
        {
                scanf("%c",&a[i]);
                if(a[i]>'a',a[i]<'z') a[i]=a[i]+1;
        }//这里的i每次都不一样,你接下来才输入a[i],那你的循环又怎么结束呢?
想知道小甲鱼最近在做啥?请访问 -> 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 ,加密后的字符,是个 {
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        }

        printf("%s",a);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[88];
    while((a[++i]=getchar())!='\n')
    {
        if(a[i]>'a'&&a[i]<'z') //这里确定不是>=和<=
            a[i]=a[i]+1;
    }
    a[i]='\0';
    printf("%s",a);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

没有原题 我瞎写的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

数组初始化怎么才能知道'\0'的位置呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 18:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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