我目前正在做一个我要采取的项目。仅考虑用户输入的两位数字。我不想接受输入&然后检查它是否小于100。
除了进行此检查外,是否有任何其他方法可以过滤出仅2位数的数字&接受它作为输入,而用C语言编程?因为,我甚至不想让用户输入3位数字。例如,如果用户想要输入123,他将无法执行此操作。只有当他输入12或23时,才接受输入。
谢谢。
答案 0 :(得分:4)
我们可以将输入截断为2位,但这不是问题所在。它表示要忽略超过2位的输入。
此外,简单地限制输入的位数的问题是 next 输入采用任何截断的数字。例如,
scanf("%2d",&myNum);
如果我输入678
,8
仍保留在缓冲区中并被读取以进行下一次输入。我们可以清除输入缓冲区,但这不是问题所在:你不希望数字被截断为2位,你想要忽略它们。
这是我的答案,它将数字作为文本字符串读取,并拒绝那些没有2位数的数字,以及那些不是数字的数字。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int myNum;
int c;
char str[4];
do {
myNum = 0;
printf("Enter number: ");
scanf("%3s",str);
while((c = getchar()) != '\n' && c != EOF); // flush the input
if (strlen(str) != 2 || !isdigit(str[0]) || !isdigit(str[1]))
continue;
if (sscanf(str, "%d", &myNum) != 1)
continue;
printf("You entered %d\n\n", myNum);
} while (myNum != 10);
return 0;
}
示例会话:
Enter number: 42
You entered 42
Enter number: 678
Enter number: 1
Enter number: 10
You entered 10
您可以看到678
和1
未被接受。
答案 1 :(得分:0)
您需要在scanf
时限制数字。我希望下面的代码片段对您有用。
int main()
{
int myNum;
printf("Enter number");
scanf("%2d",&myNum); // here I am taking input of two digits only
printf("%d", myNum); // Verifying input by printing
}
我希望您输入的单个数字为01
或1
,但它仍然会有相同的效果。
答案 2 :(得分:0)
解决方案:
scanf("%2d",&variableName);
我认为它会起作用....
答案 3 :(得分:0)
如果您正在寻找一个禁用字母输入并将数字输入仅限制为两位数的程序,我想这需要某种与键盘接口(带有终端I / O设置),这稍微困难一些。除此之外,我想除了scanf()之外还有两种更简单的方法:
1)使用字符数组让用户输入数字,但是清除除前两个数字之外的所有无关数字,并将数组提供给atoi()以使其成为真正的整数值,以便在程序中进一步使用。 / p>
2)为了避免用户乱写控制台,你可以使用提供getche()之类的ncurses工具。请参阅What is Equivalent to getch() & getche() in Linux?
最后在获取两个字符后,您应该能够将它们转换为整数并使用。
在这两种方法中,您可以验证用户是否实际输入了数字,然后将它们转换为整数。
答案 4 :(得分:0)
#include<stdio.h>
#define CHOICE 2
int digit(int num)
{
int i=0;
while(num>0)
{
num=num/10;
++i;
}
return i;
}
int main()
{
int num=0;
do
{
printf("\nInput two digit number: ");
scanf("%d",&num);
if(digit(num)==CHOICE)
{
break;
}
else
{
printf("\nInvalid Input");
continue;
}
}
while(1);
printf("You entered %d",num);
}