我想使用scanf()
读取下表:
Q 1 3
U 2 6
Q 2 5
U 4 8
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
void main() {
int *a;
int i, j;
a = (int *) malloc(4 * 3 *sizeof(int));
printf("input:\n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++) {
scanf("%d", a + 3 * i + j);
}
}
printf("output:\n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", a[3*i+j]);
}
printf("\n");
}
}
但是,当我输入第一行Q 1 3
时,这个程序就结束了。不知道为什么?
最佳答案
发生这种情况是因为您向要使用 %d
读取数字的程序提供了非数字输入。由于 Q
不是一个数字,scanf
失败。
但是,你的程序没有关注scanf
的返回值,一直在失败状态下调用它。该程序认为它正在获取一些数据,但实际上并没有。
要解决此问题,请更改代码以在读取非数字字符时传递 %c
或 %s
,检查 scanf< 的返回值
,并在 scanf
失败时清除无效输入。
当您调用 scanf
时,它会返回与它提供的 %
说明符对应的值的数量。以下是检查 scanf
的返回值的方法:
if (scanf("%d", a + 3 * i + j) == 1) {
... // The input is valid
} else {
fscanf(f, "%*[^\n]"); // Ignore to end of line
}
关于c - 为什么 scanf 无法读取我的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39075225/