You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

问题原因和解决办法

  1. EOF的手动触发方式:在终端手动输入文本时,程序不会自动识别输入结束,你需要手动触发EOF信号:

    • Windows系统:输入完所有文本后,按下 Ctrl + Z(再回车),程序就能接收到EOF并终止循环。
    • Linux/macOS系统:输入完成后按下 Ctrl + D,就能触发EOF让程序停止。
  2. 代码的小优化与补全:
    你可以把循环条件直接简化成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;
    }
    
  3. 关于测试用例的说明:如果是老师的自动化测试用例(比如从文件读取输入),程序会自动在文件末尾检测到EOF,不需要手动触发,所以你的核心逻辑是完全没问题的,只是终端手动输入时需要知道触发EOF的方法而已。

备注:内容来源于stack exchange,提问作者NgoMinh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:25:28