如何在 C 语言中只允许输入两位数?
How to allow & take only two digit numbers as Input, in C?
我目前正在做一个项目,在这个项目中我必须只考虑用户输入的两位数字。我不想接受输入然后检查它是否小于 100。
在用 C 语言编程时,有没有其他方法可以过滤掉 2 位数字并将其作为输入来代替进行此检查?因为,我什至不想让用户输入 3 位数字。例如,如果用户想输入 123,他将无法输入。只有当他输入 12 或 23 时,才接受输入。
谢谢。
拥有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 位数字,但这不是问题所问的内容。它说超过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
未被接受。
解决方案:
scanf("%2d",&variableName);
我认为它会起作用....
如果您正在寻找一个禁用字母输入并将数字输入限制为两位数的程序,我想这需要某种与键盘的接口(使用终端 I/O 设置),这会稍微困难一些.除此之外,我想除了 scanf() 之外还有两种更简单的方法:
1) 使用字符数组让用户输入数字,但是您清除了除前两个之外的所有无关数字,并将该数组提供给 atoi() 使其成为真正的整数值,以便在您的程序中进一步使用.
2) 为了避免用户乱写控制台,您可以使用ncurses 工具,它提供类似getche() 的用法。参考 What is Equivalent to getch() & getche() in Linux?
最后,在获取两个字符后,您应该能够将它们转换为整数并使用。
在这两种方法中,您都可以验证用户是否实际输入了数字,然后将它们转换为整数。
#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);
}
我目前正在做一个项目,在这个项目中我必须只考虑用户输入的两位数字。我不想接受输入然后检查它是否小于 100。
在用 C 语言编程时,有没有其他方法可以过滤掉 2 位数字并将其作为输入来代替进行此检查?因为,我什至不想让用户输入 3 位数字。例如,如果用户想输入 123,他将无法输入。只有当他输入 12 或 23 时,才接受输入。
谢谢。
拥有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 位数字,但这不是问题所问的内容。它说超过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
未被接受。
解决方案:
scanf("%2d",&variableName);
我认为它会起作用....
如果您正在寻找一个禁用字母输入并将数字输入限制为两位数的程序,我想这需要某种与键盘的接口(使用终端 I/O 设置),这会稍微困难一些.除此之外,我想除了 scanf() 之外还有两种更简单的方法:
1) 使用字符数组让用户输入数字,但是您清除了除前两个之外的所有无关数字,并将该数组提供给 atoi() 使其成为真正的整数值,以便在您的程序中进一步使用.
2) 为了避免用户乱写控制台,您可以使用ncurses 工具,它提供类似getche() 的用法。参考 What is Equivalent to getch() & getche() in Linux?
最后,在获取两个字符后,您应该能够将它们转换为整数并使用。
在这两种方法中,您都可以验证用户是否实际输入了数字,然后将它们转换为整数。
#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);
}