这是一个基本问题:
我如何才能接受用户输入并仅接受数字? 我知道我需要使用这个开始:
do{
ch=getchar();
}while (ch != '\n');
但是我知道这还不够。这将阻止所有输入,包括数字,因此当输入为数字时我需要中断。 还有如何在数字的第一位之后不中断?
我没有运气就尝试查找。
谢谢!
答案 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;
}