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

VS Code中C语言代码输入正确仍提示Invalid Input问题求助

问题原因及修复方案

核心问题1:scanf("%s")无法读取带空格的输入

%s格式符默认在遇到空格、换行、制表符时就会停止读取,你预期的正确答案programming language包含空格,所以scanf只会把第一个单词programming写入question数组,自然和目标字符串匹配失败。

问题2:C语言不支持嵌套定义函数

你把low函数定义在了main函数内部的while循环里,这不符合标准C的语法要求,仅部分编译器会做扩展支持,属于可移植性错误。同时low函数声明了返回值类型为char*,但代码中没有任何返回语句,会导致未定义行为。

问题3:scanf参数类型错误

数组名question本身就代表数组首地址,不需要加取地址符&,&question的类型是指向长度为25的字符数组的指针,和%s要求的char*类型不匹配。


修复后的代码
#include <stdio.h>
#include <string.h>
#include <ctype.h>

// 把low函数移到main外面定义,调整返回值为void,不需要返回内容
void low(char* question) {
    for (int i = 0; question[i]; i++) {
        // 强转为unsigned char避免负数字符出现未定义行为
        question[i] = tolower((unsigned char)question[i]);
    }
}

int main() {
    int score = 0; // 补充缺失的score变量定义
    while (1) {
        printf("1. Is Python a programming language or a creature? ");
        char question[25];
        // 用fgets读取整行输入,支持带空格的内容
        fgets(question, sizeof(question), stdin);
        // 去掉fgets读取到的末尾换行符
        question[strcspn(question, "\n")] = '\0';
        low(question);

        if (strcmp(question, "programming language") == 0 || strcmp(question, "creature") == 0) {
            printf("Correct! It's both actually +1\n");
            score += 1;
            break;
        } else {
            printf("Invalid Input\n");
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Sohaila Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:06:03