如何让scanf逐位读入整型数字
时间: 2024-09-22 20:00:45 浏览: 60
在C语言中,`scanf`函数通常用于一次读取整个输入字符串,如果你想逐位读入整型数字,可以稍微复杂一些,因为`scanf`默认会一次性读取整数的完整表示。不过,你可以自定义输入处理来实现这个目标。这里有一种常见的做法是使用循环和`getchar()`函数:
```c
#include <stdio.h>
int main() {
int num;
while (true) {
char ch = getchar(); // 逐个读取字符
if (ch == '-' || (ch >= '0' && ch <= '9')) { // 检查是否遇到负号或数字
num = ch - '0'; // 对于数字字符,转换成数值并添加到num上
if (ch == '-') {
num *= -1; // 如果遇到负号,先置数为负
}
} else if (ch == EOF || ch == '\n') { // 遇到换行符或文件结束标志,结束输入
break;
} else {
printf("Invalid input, please enter a number or '-':\n");
continue; // 如果不是有效字符,提示用户并继续下一轮
}
// 如果已经读取了至少一位数字,再读取剩余部分
if (num != 0) {
while ((ch = getchar()) >= '0' && ch <= '9') {
num = num * 10 + (ch - '0');
}
}
// 如果输入的是正数,直接跳出循环;如果输入的是负数,还需要加上负号
if (num > 0) {
break;
}
}
printf("Read number: %d\n", num);
return 0;
}
阅读全文