C语言代码输入读取异常且输出全为NO,请求问题排查
代码问题分析及修复
首先看你的代码:
#include<stdio.h> void main() { int t,i=0; scanf("%d",&t); while(t--) { char c; scanf("%c",&c); char s[10]="codeforces"; while(s[i]!='\0') { if(s[i]==c) printf("YES\n"); else printf("NO\n"); i++; } } }
存在以下几个关键问题:
输入残留换行符被读取:用
scanf("%d", &t)输入测试用例数量后,按下的回车键会在输入缓冲区留下换行符。后续的scanf("%c", &c)会直接读取这个换行符,而非你输入的目标字符,导致第一次判断完全错误。变量
i未在每次测试用例循环中重置:i定义在while(t--)循环外部,第一次循环后i会自增到10("codeforces"有10个有效字符),后续测试用例循环中,s[i]已是字符串结束符'\0',内层while循环直接跳过,无法正确执行判断逻辑。字符串数组长度不足:
char s[10] = "codeforces";中,"codeforces"本身有10个字符,加上C语言字符串必需的结束符'\0',总共需要11字节空间。定义为s[10]会导致结束符无法被正确存储,内层while(s[i]!='\0')可能陷入死循环或错误判断。输出逻辑错误:当前代码会对"codeforces"的每个字符逐一判断并输出YES/NO,而非判断输入字符是否存在于字符串后输出一次结果。比如输入'c',会输出两次YES和八次NO,不符合常规需求。
修复后的代码示例
#include<stdio.h> int main() // 标准C中main的返回类型应为int { int t; scanf("%d", &t); getchar(); // 吃掉输入t后的换行符 while(t--) { char c; scanf("%c", &c); getchar(); // 吃掉输入字符后的换行符 char s[] = "codeforces"; // 自动计算长度,包含结束符 int found = 0; int i = 0; // 每次循环重置i while(s[i] != '\0') { if(s[i] == c) { found = 1; break; // 找到匹配后直接跳出循环 } i++; } printf(found ? "YES\n" : "NO\n"); // 统一输出一次结果 } return 0; }
内容的提问来源于stack exchange,提问作者Lakshmi Korti
相关产品推荐
相关产品推荐

