【发布时间】:2018-08-31 10:26:52
【问题描述】:
假设输入是:
6 4
0 1 2 2 1 0
1 0 0 0 0 1
1 0 0 0 0 1
0 1 1 1 1 0
6 和 4 分别是宽度和高度。 我用的是:
scanf("%d %d", &width, &height);
然后我使用 for 循环将其余输入放入二维数组 (board[height][width])。 问题在于验证宽度和高度。
当我输入时
6 4
0 1 2 2 1 0
1 0 0 0 0 1
1 0 0 0 0
0 1 1 1 1 0
错过了一个输入,但它会等到再输入一个数字。如果输入的输入不足或过多,我该如何管理并使其发生错误?
有人可以帮我解决这个问题吗?谢谢!!
【问题讨论】:
-
scanf返回一个值。首先检查一下。 -
您的问题是在创建整个板后检查给定的宽度和高度输入是否正确?您可以在将值插入
board时保留一个计数器并检查它是否等于width * height。然而,这将是一个幼稚的检查 -
我知道 if(scanf("%d %d", &width, &height) != 2) {} 但是 6 4 0 1 2 2 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 1 0 也打印输出...是否有通过按回车键将宽度和高度与其余输入分开?
-
比如我把6 4按回车然后剩下的输入,否则会报错。所以 6 4 0 1 2 2 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 1 1 1 0 应该会发生错误,因为即使我在 6 和 4 之后不按 enter,它也会打印输出。
-
scanf()系列函数不关心换行;它们只是要消耗的空白空间。如果您关心行,请使用fgets()阅读并使用sscanf()进行解析。请注意,只要数字之间有空格,整个数据集就可以在一行上,或者每个数字可以单独在一行上,连续数字之间有任意数量的空白行。您不会发现与scanf()的区别。
标签: c multidimensional-array scanf