【发布时间】:2021-07-19 12:02:25
【问题描述】:
我有一个整数“n”,它负责稍后输入的数字数量。
我需要在这里检查任何不正确的输入。
'n' 的第一个 scanf 工作正常,但第二个有一些缺陷。
案例如下:
n = 3(例如)- 没关系
那我想scanf: 1 2 3 4
它将被扫描前 3 个值,但我需要抛出一个错误。
同样:1 2 3.5 -(最后一个数字是浮点数,但仍为 3)
还有一个字符:1 2 3g
if (scanf("%d", n) == 1 && getchar() == '\n') {
if (n > NMAX || n < 0) {
error = 1;
return;
}
for (int i = 0; i < n; i++) {
if (scanf("%d", p) == 1) {
唯一正确的输入是在for 循环中扫描的完全相同数量的整数(等于“n”)。
UPD:我只能使用 <stdio.h> 库以及 scanf。
【问题讨论】:
-
仅将
fgets()用于用户输入(可能后跟strtol()) -
fgets()是标准库的一部分,它的原型在<stdio.h>header -
您可以手动解析来自
fgets()的字符串,而不是使用strtol()... 甚至使用sscanf()。要点是:scanf()是获取用户输入的坏工具......它可以在一些行为良好的环境中做到这一点(当 scanf 期望整数不是行为良好的环境时键入"3.5"),但它缺乏(很多!)在处理错误输入时。 -
@Arzental 如果你不被允许使用
scanf以外的任何东西,那么你就不走运了。scanf是用户输入的糟糕选择。它不是为此而设计的。 -
@ryyker:提示在名称中:scan formatted。 它旨在读取定义明确的数据文件,例如之前的那些通过
printf()写的。 ;-)