这是一个基本问题:
如何从用户那里获取输入并且只接受数字?我知道我需要使用这个开始:
do{
ch=getchar();
}while (ch != '\n');
但我知道这还不够。这将阻止每个输入,包括数字,所以当输入是数字时我需要中断。还有如何在数字的第一个数字之后不打破?
我试着查找这个没有运气。
谢谢!
当您需要执行错误检查,根据输入做不同的事情等时,最好逐行读取用户输入并按照您认为合适的方式处理每一行。
// 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.
}
}
读取数字可能最简单的方法是使用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
,然后不能再被任何进一步的访问消耗stdin
。scanf
相比之下,将此字符保留在缓冲区中以供以后使用。
只需检查输入是否介于'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;
}
简单,漂亮,整洁的解决方案:),我开始编程时曾经解决过类似的问题,这会让你只输入数字
#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;
}