我想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
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句