447908543 发表于 2018-8-11 23:45:42

求助各位大神们课后作业s1e13while语句中遇到的问题

要求将一段句子中大小写转换,小弟写的代码如下,编译器没有报错,可是运行无论输入什么都输出“请输入正确的英文字母!!!”,找了很久都不知道错在哪,求解。。
#include <stdio.h>
int main()
{
        int a;
        printf("请输入需要转换的句子(EN):");
        while((a=getchar())!='\n');
        {
                if(a>=65&&a<=90)
                {
                        a=a+32;
                }
                else if(a>=97&&a<=122)
                {
                        a=a-32;
                }
                else
                {
                        printf("请输入正确的英文字母!!!");
                }
                putchar(a);
        }
        putchar('\n');
        return 0;
}

447908543 发表于 2018-8-11 23:51:19

{:10_266:}{:10_266:}{:10_266:}对了 还有就是有大神知道倒数第二行的putchar('\n');起什么作用吗,才学习putchar函数,不是很懂。。。

无符号整形 发表于 2018-8-12 00:05:46

1.第六行多了分号
2.就是输出回车。

会上树的猪 发表于 2018-8-12 08:30:22

while语句本身使用复合语句作为循环体,但是自身同时也是一条语句。语句从while语句开始执行,直到遇到第一个分号结束,如果存在复合语句那么以复合语句右括号结束。你的代码第6句的while循环是以分号结束的,那么此时,while在循环读取输入字符时都会自动读取到最后一位,然后结束循环,你后面花括号里的代码就相当于是顺序结构的一部分,不属于while循环了。
putchar('\n');的作用是输出一个换行符,相当于printf('\n');

447908543 发表于 2018-8-12 12:48:13

无符号整形 发表于 2018-8-12 00:05
1.第六行多了分号
2.就是输出回车。

感谢!!!

447908543 发表于 2018-8-12 12:49:17

会上树的猪 发表于 2018-8-12 08:30
while语句本身使用复合语句作为循环体,但是自身同时也是一条语句。语句从while语句开始执行,直到遇到第一 ...

感谢!!!

冬阳阳 发表于 2018-8-13 11:43:53

447908543 发表于 2018-8-11 23:51
对了 还有就是有大神知道倒数第二行的putchar('\n');起什么作用吗,才学习p ...

'\n'是换行,就是回车,当你输入完字符串的时候,不是要按一下回车嘛!回车后while循环结束。
页: [1]
查看完整版本: 求助各位大神们课后作业s1e13while语句中遇到的问题