【问题标题】:How can I verify that the input value is only a positive number in C? [duplicate]如何验证输入值只是 C 中的正数? [复制]
【发布时间】:2020-04-10 03:30:59
【问题描述】:

我需要检查如果用户输入了一个值,程序仅在该值是[1-8](含)之间的正整数时运行,但如果输入值是字母或单词或没有输入all (Enter),程序再次要求输入

#include <stdio.h>


int main (){

int height;

do {
    printf  ("Height: ");
    scanf ("%i", &height);
}

while (height < 1 || height > 8);   

{ .
  .
  .
  .

我正在考虑在 while 验证中添加另一个条件“||(或)”,例如 while “height 与整数不同(!=)”然后做......

但我不知道如何在其他 StackOverflow 问题中检查该语句。希望大家多多指教

【问题讨论】:

  • scanf() 返回成功转换的数量,您可以根据需要利用它
  • scanf 对于交互式用户输入并不是很有用
  • 如果scanf 失败(没有要读取的号码),你必须fflush(stdin)
  • @PaulOgilvie 问题是,这将是一个无限循环。刷新标准输入是未定义的,在大多数平台上什么都不做。
  • 我最喜欢的正确输入顾问:sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html

标签: c validation input integer


【解决方案1】:

使用fgets()

char buf[1000];
if (!fgets(buf, sizeof buf, stdin)) {
    exit(EXIT_FAILURE);
}
if (buf[1] != '\n') exit(EXIT_FAILURE);
if (*buf < '1') exit(EXIT_FAILURE);
if (*buf > '8') exit(EXIT_FAILURE);
// use *buf, maybe (*buf - '0')

"&lt;ENTER&gt;""0&lt;ENTER&gt;""12&lt;ENTER&gt;""a&lt;ENTER&gt;""&lt;SPACE&gt;3&lt;ENTER&gt;" 的输入...将失败退出

【讨论】:

  • 感谢@pmg,但我不想退出程序,而是想一次又一次地询问用户,直到他们输入正确的值,例如:“Inster a value betwen 1 - 8" 高度:-1 高度:0 高度:42 高度:50 高度:4 高度:正确!!
  • @JuanPabloYepes,好吧,把代码放在一个无限循环中,用continue 替换exit。输入正确时添加您喜欢的任何提示和break
【解决方案2】:

我发现了这个已回答的问题: Check if input is integer type in C

这个问题只能解决关于能够知道scanf的输入是不是数字的部分,这似乎是要点。您仍然需要检查输入是否为正数或是否在您想要的范围内。

【讨论】:

  • 请标记为重复,而不是链接到另一个答案;或详细说明相关差异是什么。
猜你喜欢
  • 2011-02-23
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
相关资源
最近更新 更多