顾西凉 发表于 2018-12-15 23:00:05

关于while语句的问题

代码如下 :
   #include<stdio.h>
int main(void)
{
        int ch;
        printf("请输入一行英文句子:");

        while ((ch=getchar()) != '\n')
        {
                if ('A' <= ch && 'Z' >= ch)
                {
                        ch = ch-'A' +'a';
                }
                else if(ch>='a'&&ch<='z')
                {
                        ch = ch - 'a'+'A';
                }
                putchar(ch);
        }
        putchar('\n');
        return 0;
}

要是把'\n'换成是'\0' 那么我的代码就一直处在转换后的等待状态结束不了(我知道'\0'是一个字符串的结束符)我输入'\0' 也没有结束循环求解


顾西凉 发表于 2018-12-15 23:03:59

要是觉得我描述的不清楚,麻烦您复制粘贴到编译器看一下('\n'换成是'\0' )谢谢啦

ba21 发表于 2018-12-15 23:05:54

getchar()
又 putchar() 你打算什么时候结束?

好比你一个箱子,从里面取东西取来。然后又放进去,你觉得你的箱子空的了吗?

先把你的题意说清楚吧

人造人 发表于 2018-12-15 23:14:40

'\0' 属于不可见字符
可以按下Alt键然后按小键盘上面的数字0键,一定是小键盘上面的0
可以通过按Alt+小键盘上的数字来输入字符的ASCII
例如输入字母'A',可以按下Alt键然后在小键盘上依次按数字键6和5,然后松开Alt键

sunrise085 发表于 2018-12-15 23:39:37

我也不清楚是否理解你的提问了。按照我对你的问题理解说一下个人看法。你所说的把'\n'换成'\0',是想把while循环的条件中的'\n'换成'\0'吗?那样是肯定不行的。

首先需要了解getchar(),它是从标准输入里读取一个字符,标准输入一般理解是键盘能输入的字符,这和ASCII表并不完全对应,例如ASCII表中回车换行是两个字符(ASCII码分别是13和10),在标准输入中是一个键。
然后再来理解'\n'和'\0','\0'是C语言中字符串的结束字符,在ASCII码中是0,即NULL,但是并不是标准输入的字符;'\n'是回车换行字符,是能够使用标准输入进行输入的字符。
最后看看程序的执行,你是无法使用标准输入来输入'\0'的,因此若用'\0'作为while循环判断也就无法结束循环。'\n'能够被getchar捕获,因此将之作为while循环结束的判断条件是可以结束while循环的。

顾西凉 发表于 2018-12-16 12:17:05

sunrise085 发表于 2018-12-15 23:39
我也不清楚是否理解你的提问了。按照我对你的问题理解说一下个人看法。你所说的把'\n'换成'\0',是想把whil ...

明白了谢谢

顾西凉 发表于 2018-12-16 12:17:49

人造人 发表于 2018-12-15 23:14
'\0' 属于不可见字符
可以按下Alt键然后按小键盘上面的数字0键,一定是小键盘上面的0
可以通过按Alt+小键 ...

谢谢

顾西凉 发表于 2018-12-16 12:19:29

ba21 发表于 2018-12-15 23:05
getchar()
又 putchar() 你打算什么时候结束?



我把getchar()理解为scanfputchar理解为printf()所以我认为是可以结束的

ba21 发表于 2018-12-16 12:29:31

顾西凉 发表于 2018-12-16 12:19
我把getchar()理解为scanfputchar理解为printf()所以我认为是可以结束的

不好意思,我把putchar 看成 ungetch。失误

顾西凉 发表于 2018-12-16 12:39:28

ba21 发表于 2018-12-16 12:29
不好意思,我把putchar 看成 ungetch。失误

那我这样理解没有问题把
页: [1]
查看完整版本: 关于while语句的问题