【问题标题】:How can I distinguish between integer and character when using scanf()使用scanf()时如何区分整数和字符
【发布时间】:2014-05-12 13:31:24
【问题描述】:

我只是使用函数scanf()。代码如下:

scanf("%d",&a);
printf("%d",a);

当我输入 1 时,它会打印出我想要的 1。 但即使我输入 1a,它也会像以前一样打印 1。 当用户输入不是整数的东西时((例如)2.3,12ab,1 a) 我想向用户显示“输入整数”之类的警告。

我该如何解决这个问题?

【问题讨论】:

  • 您希望人们只输入一个数字还是一个整数(即 13445 是否有效?)
  • 在scanf之后做getchar();如果既不是EOF 也不是\n,那么他们一定在数字后面输入了另一个字符
  • 一个像12345这样的整数。另外,当字符像123abc一样进入时,我想抓住它并显示警告。

标签: c


【解决方案1】:

使用fgets()将其全部读入字符串。

如果您只是希望他们输入的所有内容都是单个int,请遍历字符串并在每个字符上查找isdigit(),然后当您发现它们都只是数字时,请致电strtod(),如果不是,发出错误并重新提示。

如果您想从同一输入行解析多个内容,则需要使用 strtok() 之类的内容解析字符串以一次获取一个单独的标记,然后查看每个标记并确定它是否是一个数字查看每个字符是否isdigit() 或等于'-' '.' 等。如果是这样,请将其解析为带有 strtol()strtod() (等)的数字(取决于您看到的内容,int 或 float/double。)否则,将令牌解析为字符串或发出错误。

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 2013-05-24
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多