C语言文本转大写程序无法终止问题求助
C语言文本转大写程序无法终止问题求助
嘿,我来帮你解决这个程序停不下来的问题!
首先理清楚你的处境:你写的C程序能顺利把文本转成大写,但运行时一直没法结束输入,之前老师会给明确的终止字符(比如'1'),但这次是普通文本,你想用EOF判断输入结束,却没达到预期效果,对吧?
问题场景与示例
输入
Hello John,How are you?
Bye,
输出
HELLO JOHN,HOW ARE YOU?
BYE,
你的代码
#include <stdio.h> int main(){ char c; while(1){ scanf("%c", &c); if(c == EOF) break; else{ c = toupper(c); printf("%c", c); } } return 0; }
问题原因和解决办法
EOF的手动触发方式:在终端手动输入文本时,程序不会自动识别输入结束,你需要手动触发EOF信号:
- Windows系统:输入完所有文本后,按下 Ctrl + Z(再回车),程序就能接收到EOF并终止循环。
- Linux/macOS系统:输入完成后按下 Ctrl + D,就能触发EOF让程序停止。
代码的小优化与补全:
你可以把循环条件直接简化成while(scanf("%c", &c) != EOF),这样不用单独写break逻辑,更简洁;另外别忘了加上#include <ctype.h>——toupper函数是定义在这个头文件里的,有些编译器可能允许省略,但严格来说必须包含,否则可能出现编译警告或未定义行为:#include <stdio.h> #include <ctype.h> int main(){ char c; while(scanf("%c", &c) != EOF){ c = toupper(c); printf("%c", c); } return 0; }关于测试用例的说明:如果是老师的自动化测试用例(比如从文件读取输入),程序会自动在文件末尾检测到EOF,不需要手动触发,所以你的核心逻辑是完全没问题的,只是终端手动输入时需要知道触发EOF的方法而已。
备注:内容来源于stack exchange,提问作者NgoMinh
相关产品推荐
相关产品推荐

