C 我应该使用哪些功能从键盘获取输入?

C 我应该使用哪些功能从键盘获取输入?,c,input,C,Input,我正在学习C,现在我想从键盘上获取输入(2个数字范围为[0,99]并进行比较)。我找到了很多获取输入的选项: scanf() getchar() fgets() 获取() 我试了一些: Scanf: #include<stdio.h> main() { int flag=0,num1, num2; printf("Give a number between 0-999"); do{ if(flag == 1){ printf("Wrong Inp

我正在学习C,现在我想从键盘上获取输入(2个数字范围为[0,99]并进行比较)。我找到了很多获取输入的选项:

  • scanf()
  • getchar()
  • fgets()
  • 获取()
我试了一些:

Scanf:

#include<stdio.h>

main()  
{
int flag=0,num1, num2;

printf("Give a number between 0-999");

do{

    if(flag == 1){
       printf("Wrong Input. Plz give a number between 0-99 ");    
    }   
    printf("\nnumber 1: ");
    scanf("%d", &num1);
    flag=1;   
}while(num1<0 || num1>1000);

printf("Give one more");
flag=0;

do{

    if(flag == 1){
       printf("Wrong Input. Plz give a number between 0-99 ");    
    }   
    printf("\nnumber 2: ");
    scanf("%d", &num2);
    flag=1;   
}while(num2<0 || num2>1000);

if(num1>num2){
    printf("the max number is : %d\n", num1);
}else 
    if (num1<num2){
        printf("the max number is : %d\n", num2);
    }else
        printf("they are equals\n");            
#include<stdio.h>

main()
{
int flag=0;
char input1,input2;

printf("Give a number between 0-999");

do{

    if(flag == 1){
       printf("Wrong Input. Plz give a number between 0-99 ");    
    }   
    printf("\nnumber 1: ");
    input1 = getchar();
    flag=1;   
}while(input1<0 || input1>1000);

printf("Give one more");
flag=0;

do{

    if(flag == 1){
       printf("Wrong Input. Plz give a number between 0-99 ");    
    }   
    printf("\nnumber 2: ");
    input1 = getchar();
    flag=1;   
}while(input2<0 || input2>1000);

if(input1>input2){
    printf("the max number is : %c\n", input1);
}else 
    if (input1<input2){
        printf("the max number is : %c\n", input2);
    }else
        printf("they are equals\n");


}
#包括
main()
{
int标志=0,num1,num2;
printf(“给出一个介于0-999之间的数字”);
做{
如果(标志==1){
printf(“输入错误。Plz给出的数字介于0-99之间”);
}   
printf(“\n数字1:”);
scanf(“%d”&num1);
flag=1;
}而(num11000);
printf(“再给一个”);
flag=0;
做{
如果(标志==1){
printf(“输入错误。Plz给出的数字介于0-99之间”);
}   
printf(“\n数字2:”);
scanf(“%d”&num2);
flag=1;
}而(num21000);
如果(num1>num2){
printf(“最大数量为:%d\n”,num1);
}否则
if(num1input2){
printf(“最大数量为:%c\n”,input1);
}否则
如果(input1返回成功扫描的值的数量,或者在错误时返回
-1
。因此,如果
scanf
没有返回
1
,则出现问题,您应该相应地采取行动


getchar
的问题是,它返回一个字符(或
EOF
),如果输入一个数字,则只返回第一个数字,作为字符而不是数字。对
getchar
的第二次调用将返回第一次输入的第二个数字,作为字符


我建议输入函数应该是这样的:

int get_input(void)
{
    /* Infinite loop */
    for (;;)
    {
        printf("Please enter a value between 1 and 9999 (inclusive): ");
        fflush(stdout);

        char buffer[256];

        /* Read input from the user */
        if (fgets(buffer, sizeof(buffer), stdin) == NULL)
        {
            perror("Error getting input");
            return -1;
        }

        int value;

        /* Extract an integer value from the input */
        if (sscanf(buffer, "%d", &value) != 1)
        {
            printf("Your input was not a valid value.\n");
            continue;  /* Try to get input again */
        }

        /* Check for a valid value */
        if (value >= 1 && value <= 9999)
            return value;  /* Got a value that is allowed */

        printf("Not a valid value.\n");
        /* Since we're in a loop, will continue from the beginning by asking for a value */
    }

    return -1;  /* Must return a value */
}

我不知道!很好!@JoachimPileborg:)但是我将如何进行检查?(通过检查变量num1?)因为我在while语句中进行了检查,如果scanf返回-1,它应该再次循环。@Nat95 If
scanf
返回
EOF
(例如
-1
)这可能意味着文件结束,也可能意味着有错误。在这两种情况下,您都无法在这种情况下继续。另一方面,如果
scanf
return
0
,则您应该跳过输入(例如使用读取虚拟缓冲区)并告诉用户输入一个正确的数字。@Nat95更新了代码,将
fgets
的结果与
NULL
进行显式比较,因为
fgets
在任何类型的错误上返回
NULL
。在第二个
if
中,我再次比较
1
,因为我扫描了一个项目。if
anfssc
没有返回
1
然后扫描该项时出现某种问题。@Nat95
continue
语句立即继续循环,因此它将跳回循环的开头并再次打印提示。try get(),您还可以将数字的读取封装在函数中以避免代码重复
int value1;
if ((value1 = get_input()) == -1)
    exit(1);  /* Error reading value */