仅将输入过滤为数字。 C

时间:2018-08-22 19:27:10

标签: c input limiting

这是一个基本问题:

我如何才能接受用户输入并仅接受数字? 我知道我需要使用这个开始:

    do{
    ch=getchar();
     }while (ch != '\n');

但是我知道这还不够。这将阻止所有输入,包括数字,因此当输入为数字时我需要中断。 还有如何在数字的第一位之后不中断?

我没有运气就尝试查找。

谢谢!

4 个答案:

答案 0 :(得分:3)

当您需要执行错误检查,根据输入内容做不同的事情等时,最好逐行读取用户输入并按需要处理每一行。

// Make it large enough for your needs.
#define LINE_LENGTH 200

char line[LINE_LENGTH];

// Keep reding lines of text until there is nothing to read.
while ( fgets(line, sizeof(line), stdin) != NULL )
{
   // Process contents of line.
}

如果希望每行只看到一个数字,则可以使用sscanf从每行中提取数字。

while ( fgets(line, sizeof(line), stdin) != NULL )
{
   int num;
   if ( sscanf(line, "%d", &num) == 1 )
   {
      // Got a number. Use it.
   }
}

答案 1 :(得分:2)

读数字最简单的方法是使用scanf

int number;
if (scanf("%d",&number) == 1) {
  printf("successfully read number %d\n",number);
} else {
  printf("not a number.\n");
}

它会跳过前导空格,然后从stdin中提取字符,只要它们与整数格式匹配即可。请注意,由于操作系统可能会缓冲输入(超出您的控制范围),因此您可能仍需要按“ enter”(输入),然后程序才能继续。

请注意,ch=getchar()还将使用stdin中的第一个非数字值,然后再不能再访问stdin了就不再使用它。相反,scanf将此字符保留在缓冲区中,以备后用。

答案 2 :(得分:1)

只需检查输入的值是否在'0''9'之间

#include <stdio.h>

int main(void)
{
    size_t len = 0;
    char str[32];
    int ch;

    while (len < sizeof(str) - 1) {
        ch = getchar();
        if ((ch >= '0') && (ch <= '9')) {
            str[len++] = (char)ch;
        } else {
            break;
        }
    }
    str[len] = '\0';
    puts(str);
    return 0;
}

答案 3 :(得分:0)

简单,美观,整洁的解决方案:),在我开始编程时,我曾经解决过类似的问题,所以您只能输入数字

#include <stdio.h>

int main()
{
char ch;
  do{
    ch=getchar();
   }while (!(ch>=48 && ch<=57));
printf("yay,we got a number : %c !",ch);
return 0;
}