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

C语言检测输入是否含全部大写字母时scanf致无输出问题求解

问题修复方案

你猜对了,程序卡着没输出的核心问题就是scanf用错了,另外还有几个隐藏逻辑bug,改完就能正常跑:

  • 格式符完全不匹配:你写的scanf(" %d", &x)是用来读十进制整数的,遇到非数字的输入就会匹配失败,而且不会移动输入流的读取指针。你输入的测试内容除了末尾的0全是字母、特殊符号,程序第一次执行scanf就卡着等整数输入,永远读不到后面的内容,自然没输出。
  • 结束标志判断不对:你输入的结束符是字符'0',它的ASCII值是48,和整数0完全不是一个值,就算改对了读取方式,原来的x!=0也识别不到结束标记。
  • 输出逻辑有问题:原来的代码就算检测到所有大写字母都存在、打印了成功提示,break之后还是会无条件打印失败提示,会同时出两行矛盾结果。
  • 数组遍历越界:原来的循环先判断arr[z]==1再判断z<26,z到26的时候会先访问arr[26]这个数组外的内存,属于未定义行为,跑出来的结果可能随机出错。

修正后的代码

#include <stdio.h>

int main()
{
    int z;
    char x;
    int arr[26] = {0};

    printf("enter a sentance to check if all latter in ABC are in the sentance (in upper case):\n");

    while (1) {
        x = getchar();
        if (x == '0') { // 匹配输入的字符'0'结束输入
            break;
        }
        z = x - 'A'; // 用'A'计算偏移比写死65可读性好,也不会受编码影响
        if (z >= 0 && z <= 25) {
            arr[z] = 1;
        }
    }

    z = 0;
    while (z < 26 && arr[z] == 1) {
        z++;
    }

    if (z == 26) {
        printf("all the ABC in ur sentance\n");
    } else {
        printf("all the ABC does not in ur sentance\n");
    }

    return 0;
}

用你给的测试串THE Q$@UICK BROWN FOX JUMPS OVER tHe LAZY DOG!0运行,会正确识别出所有大写字母都存在,输出成功提示,串里的小写字母、特殊符号会被自动跳过,不会影响标记结果。

内容的提问来源于stack exchange,提问作者Alfa Hores

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:19:07