0

这是一个基本问题:

如何从用户那里获取输入并且只接受数字?我知道我需要使用这个开始:

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

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

我试着查找这个没有运气。

谢谢!

4

4 回答 4

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.
   }
}
于 2018-08-22T19:32:36.460 回答
2

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

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

stdin只要这些空格与整数格式匹配,它就会跳过前导空格,然后从中获取字符。请注意,在程序继续运行之前,您可能仍然需要按“enter”,因为操作系统可能会缓冲输入(超出您的控制范围)。

请注意, ach=getchar()还将从 中获取第一个非数字值stdin,然后不能再被任何进一步的访问消耗stdinscanf相比之下,将此字符保留在缓冲区中以供以后使用。

于 2018-08-22T19:40:09.457 回答
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;
}
于 2018-08-22T19:49:20.550 回答
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;
}
于 2018-08-22T22:06:14.227 回答