如何允许&;只取两位数作为输入,用C? 我目前正在做一个项目,我必须考虑和考虑用户输入的两个数字。我不想接受输入&然后检查它是否小于100
在用C语言编程时,是否有其他方法可以过滤掉2位数字并将其作为输入,而不是执行此检查?我甚至不想让用户输入3位数字。例如,如果用户想要输入123,他将无法这样做。只有当他输入12或23时,才接受输入如何允许&;只取两位数作为输入,用C? 我目前正在做一个项目,我必须考虑和考虑用户输入的两个数字。我不想接受输入&然后检查它是否小于100,c,numbers,C,Numbers,在用C语言编程时,是否有其他方法可以过滤掉2位数字并将其作为输入,而不是执行此检查?我甚至不想让用户输入3位数字。例如,如果用户想要输入123,他将无法这样做。只有当他输入12或23时,才接受输入 多谢各位 使用scanf时需要限制位数。我希望下面的代码片段将为您工作 int main() { int myNum; printf("Enter number"); scanf("%2d",&myNum); // here I am taking input
多谢各位 使用
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位数的输入将被忽略
此外,简单地限制输入位数的问题是,任何截断的数字都会被下一个输入获取。比如说
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;
}
您可以看到,678
和1
未被接受。解决方案:
scanf("%2d",&variableName);
我认为它会起作用……如果你正在寻找一个程序,它可以禁用字母输入,并将数字输入限制为两位数,我想这需要某种与键盘的接口(带有终端i/O设置),这稍微困难一些。除此之外,我想除了scanf()之外,还有两种更简单的方法: 1) 使用字符数组让用户输入数字,但要清除除前两个之外的所有多余数字,并将数组馈送给atoi(),使其成为真正的整数值,以便在程序中进一步使用 2) 为了避免用户在控制台上涂鸦,您可以使用ncurses工具,它提供了类似getche()的用法。提及 最后,在获取两个字符后,您应该能够将它们转换为整数并使用 在这两种方法中,您都可以验证用户是否实际输入了数字,然后将其转换为整数。
#include
#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);
}
#定义选项2
整数位数(整数)
{
int i=0;
while(num>0)
{
num=num/10;
++一,;
}
返回i;
}
int main()
{
int num=0;
做
{
printf(“\n输入两位数:”);
scanf(“%d”和&num);
如果(数字(num)=选项)
{
打破
}
其他的
{
printf(“\n无效输入”);
持续
}
}
而(1),;
printf(“您输入了%d”,num);
}
那么一位数字呢?要读取两位数字,需要使用%3d
,除非+99
(99)和-99
不是有效条目。如果您解释为什么要保留未读输入字符,而不是读取数字然后进行边界检查,这将有助于人们给您合理的建议。如果要拒绝123
,则需要读取所有字符,否则它们仍将存在于输入流中。您确实需要一个do{scanf}while(无效&&!io_错误)
循环。您不能让scanf拒绝某些内容并为您获取新的输入。这是一个太低级的API了。嗯,@PeterCordes谢谢你的建议。请原谅我模棱两可的描述。但我想说的是,我不想让用户输入一个数字,超过两位数。用户只需输入两位数字。这可能吗\但如果他们尝试,你到底想发生什么?如果您从未从输入流中读取该字符,则当您尝试读取更多字符时,该字符仍将存在。所以你的程序会被卡住。您知道简单的Unix/C终端输入是行缓冲的,对吗?因此,您不能在键入字符时拒绝该字符,您必须等待用户按return键,读取该行,然后执行某些操作。如果未读部分行,则下次仍将保留该行。请注意,这不会拒绝大于2位的数字,而只是将数字截断为2位。应该可以。@RickyMutschlechner:我同意它不会拒绝,但是myNum
只会存储输入的前两位数字。不,兄弟,它没有。无论你吃什么都要花时间。打印时,仅打印2位数字。我的问题是如何只接受2位数字,即限制用户输入超过2位数字。我已经尝试过你的方法。但我的问题是如何限制用户只输入2位数,这样他就不能输入超过2位数的数字。我不想忽略或截断任何输入。我只是不希望用户能够输入超过2位数的数字,无论如何。希望现在我已经清楚地提到了我的问题。@AshishGope不,你真的没有说清楚问题。我输入2位数字,如果这满足您的输入,您为什么要关心任何第3位数字?我不明白,为什么你的任务声明说,嘿,让我们看看他是否输入了另一个数字?如果你发布了一些代码来显示你在做什么,以及问题在哪里,那会更可信,但你的要求是模糊的,“我不想接受输入,然后检查它是否小于100。”这是荒谬的。亲爱的@Weather Vane,我只是想知道如何限制用户只输入2位数字。我想说的是,这在C语言中真的可能吗?如果这是可能的,那么tr的概念
#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);
}