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' 那么你可以打印一个错误。