实现思路
核心逻辑是:
- 先读取一个整数
n; - 如果读取成功(返回值为1),判断
n是否为0:- 若
n == 0,终止循环; - 若
n != 0,继续处理并循环;
- 若
- 如果读取失败(返回值非1),也终止循环(避免异常输入导致死循环)。
完整可运行代码
c
#include <stdio.h>
int main() {
int n;
// 循环读取整数,直到读取失败 或 读取到0
while (scanf("%d", &n) == 1) {
// 判断是否输入0,是则结束循环
if (n == 0) {
printf("输入了0,程序结束\n");
break; // 跳出while循环
}
// 这里是对非0输入的处理逻辑(可替换成你的需求)
printf("你输入的整数是:%d\n", n);
}
// 处理输入失败的情况(比如输入字母、符号)
if (feof(stdin)) { // 输入流结束(Ctrl+D/Ctrl+Z)
printf("输入流结束,程序终止\n");
} else if (ferror(stdin)) { // 输入错误
printf("输入出错,程序终止\n");
} else if (scanf("%d", &n) != 1) { // 输入非数字
printf("输入了非整数,程序终止\n");
}
return 0;
}
代码关键解释
scanf("%d", &n) == 1:确保只处理"成功读取整数"的情况,避免非数字输入导致的逻辑异常;if (n == 0) { break; }:核心判断,读取到0时立即跳出循环,程序结束;- 额外的
feof/ferror判断:增强程序健壮性,处理输入流结束、输入错误等异常情况,避免新手忽略边界场景; - 保留了对非0输入的处理逻辑(
printf部分),你可以替换成自己的业务代码(比如计算、存储等)。
测试示例
输入(依次输入,按回车):
15
28
9
0
输出:
你输入的整数是:15
你输入的整数是:28
你输入的整数是:9
输入了0,程序结束
补充测试(异常输入场景) :
如果输入非数字(比如 12 abc):
12
你输入的整数是:12
abc
输入了非整数,程序终止
总结
- 核心逻辑 :在成功读取整数后,增加
if (n == 0) break;即可实现"输入0结束程序"; - 健壮性保障 :保留
scanf返回值判断(==1),避免非数字输入导致死循环; - 边界处理 :通过
feof/ferror处理输入流结束、输入错误的情况,让程序更稳定。