return 如果整数的 scanf 得到浮点数或双精度数,则会出错
return error if scanf of a integer get a float or double
我在里面做了一个程序,用一个scanf来接收值,然后把它们放在一个数组中。
问题:
如果我输入 double 而不是 int,程序将继续并将 double 转换为 int。
我想做这个 scanf 但是如果我收到 1.2 例如我 return 输入错误和 return 0;
if (!scanf("%d",&lst[i]) or (int)lst[i]==lst[i]){
printf("error of input");
return 0;}
不工作
你可以使用scanf
和%s
格式(或使用其他函数)将用户打印的字符写入字符缓冲区(例如char buffer[256]
),然后你可以使用 atoi
函数将其转换为 int
。
由于您还想检查输入是否包含 int
之后的任何其他内容,您可以使用 strtol
而不是 atoi
,因为 atoi
等同于strtol(nptr, NULL, 10);
(根据手册页)。但是,strtol
的优点是它 returns(通过 endptr
输出参数)指向被解析为 int
的最后一个字符之后的字符的指针。在你的情况下,我假设你希望这个字符是 '\n'
,所以你可以简单地检查一下,如果它不是 '\n'
那么你可以打印一个错误。
我在里面做了一个程序,用一个scanf来接收值,然后把它们放在一个数组中。 问题: 如果我输入 double 而不是 int,程序将继续并将 double 转换为 int。 我想做这个 scanf 但是如果我收到 1.2 例如我 return 输入错误和 return 0;
if (!scanf("%d",&lst[i]) or (int)lst[i]==lst[i]){
printf("error of input");
return 0;}
不工作
你可以使用scanf
和%s
格式(或使用其他函数)将用户打印的字符写入字符缓冲区(例如char buffer[256]
),然后你可以使用 atoi
函数将其转换为 int
。
由于您还想检查输入是否包含 int
之后的任何其他内容,您可以使用 strtol
而不是 atoi
,因为 atoi
等同于strtol(nptr, NULL, 10);
(根据手册页)。但是,strtol
的优点是它 returns(通过 endptr
输出参数)指向被解析为 int
的最后一个字符之后的字符的指针。在你的情况下,我假设你希望这个字符是 '\n'
,所以你可以简单地检查一下,如果它不是 '\n'
那么你可以打印一个错误。