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
相关产品推荐
相关产品推荐

