如何允许&;只取两位数作为输入,用C? 我目前正在做一个项目,我必须考虑和考虑用户输入的两个数字。我不想接受输入&然后检查它是否小于100

如何允许&;只取两位数作为输入,用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

在用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位数的输入将被忽略

此外,简单地限制输入位数的问题是,任何截断的数字都会被下一个输入获取。比如说

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);  
}