c-使用scanf读取一个只包含换行符的整数



有没有一种方法可以使用scanf(不使用任何其他I/O函数(来检查用户输入是否只存在一个整数,后面什么都没有?

例如:

int g;
while(scanf("%d", &g)!=1){
printf("nincorrect input, try again");
}

这对于像"/"或"-"但是当你输入";54.32〃;则它将一直读到"&";,scanf的读取计数将为1,54将存储在g中。有没有办法检查输入是否只由一个整数组成,后面只有一个换行符?

我想知道是否存在不使用fgets或任何其他IO功能的解决方案?

只检查一个整数,后面只有换行符

使用"%n"来记录扫描的字符数(如果扫描到了这个程度(。

int n = 0;
scanf("%d*1[n]%n", &g, &n);
if (n > 0) puts("input consists solely of a single integer followed by a newline");

如果结果是而不是希望的,则需要额外的代码来处理错误的输入。

我建议使用fgets()来解决更大的问题。

编辑,因为我误解了这个问题:这个怎么办?

#include <stdio.h>
int main() {
int n;
char c;
scanf("%d", &n);
scanf(" %c", &c) ? printf("incorrect input, try againn") : printf("%dn", n);
return 0;
}

您可以使用赋值抑制格式运算符来提取整数之后的所有内容(任何内容(,并且读取格式说明符的字符数可以查看是否匹配任何内容,而无需将其存储在任何位置。

请参阅您的文档。

例如,

int g, gchars, xchars;
scanf("%d%n%*s%n", &g, &gchars, &xchars);
if (xchars > gchars)
printf("%d extra characters discarded after integer %dn", xchars-gchars, g);

相关内容

最新更新