C语言程序问题:实现0-100打印及重复功能失败求助
问题分析与修正
你的代码存在多处语法和逻辑错误,导致无法正常运行,下面逐一说明并给出修复方案:
错误点说明
- 数组定义无效:
char resposta[0];定义了长度为0的数组,无法存储任何字符,应改用单个char变量或至少长度为2的数组。 - 循环逻辑错位:询问用户是否重复的代码被放在
for循环内部,会导致每打印一个数字就弹出询问,不符合“打印完0到100后再询问”的需求。 printf格式错误:代码中换行直接写在字符串外,正确的换行符应为\n,比如printf("%i\n", num);。scanf参数错误:scanf("%c", resposta[0]);未传入变量地址,正确写法应为scanf("%c", &resposta);,同时需要处理输入后遗留的换行符,避免干扰后续读取。- 比较方式错误:
strcmp用于字符串比较,你传入的是单个字符,直接用字符相等判断即可,无需调用strcmp。 - 打印范围偏差:原代码从
num=0开始循环100次,最终只能打印1到100,无法输出0,且少了一次循环导致未覆盖到完整的0-100范围。
修正后的代码
#include <stdio.h> int main() { char resposta; // 初始设为's',确保第一次进入循环 resposta = 's'; do { // 从0打印到100,共101个数字 for (int num = 0; num <= 100; num++) { printf("%i\n", num); } // 询问用户是否重复,处理换行符残留问题 printf("Repetir? s/n\n"); getchar(); // 读取掉之前打印残留的换行符 scanf("%c", &resposta); } while (resposta == 'S' || resposta == 's'); return 0; }
额外说明
- 使用单个
char变量替代数组,避免数组越界风险,逻辑更简洁。 - 将询问逻辑移至
for循环外部,确保完成全部数字打印后再触发用户交互。 - 加入
getchar()处理换行符,避免用户输入回车后,换行符被下一次scanf误读导致的逻辑异常。 - 调整
for循环的初始值与条件,确保完整覆盖0到100的打印范围。
内容的提问来源于stack exchange,提问作者Bob Talinn
相关产品推荐
相关产品推荐

