【问题标题】:return error if scanf of a integer get a float or double如果整数的 scanf 得到浮点数或双精度则返回错误
【发布时间】:2021-06-24 02:27:11
【问题描述】:

我在里面做了一个程序,它使用一个scanf来接收值并将它们放入一个数组中。 问题: 如果我输入 double 而不是 int,程序将继续并将 double 转换为 int。 我想做这个 scanf 但如果我收到 1.2 例如我返回输入错误并返回 0;

if (!scanf("%d",&lst[i]) or (int)lst[i]==lst[i]){
         printf("error of input");
         return 0;}

不工作

【问题讨论】:

  • 您应该将输入读取为字符串并对其进行解析。
  • 由于lst 必须是int 的数组,如果scanf() 调用正确,则比较(lst[i] == lst[i] 将始终为真。

标签: c input integer double scanf


【解决方案1】:

您可以使用scanf%s 格式(或使用其他函数)将用户打印的字符写入字符缓冲区(例如char buffer[256]),然后您可以将其转换为int使用atoi 函数。

由于您还想检查输入是否在int 之后包含其他内容,因此您可以使用strtol 而不是atoi,因为atoi 等效于strtol(nptr, NULL, 10);(根据手册页) .但是,strtol 的优势在于它返回(通过endptr 输出参数)一个指针,该指针指向解析为int 的最后一个字符之后的字符。在你的情况下,我假设你希望这个字符是'\n',所以你可以简单地检查一下,如果不是'\n',那么你可以打印一个错误。

【讨论】:

    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多