使用fgets()或scanf()

时间:2017-06-02 03:40:18

标签: c scanf fgets getch

我正在尝试在C中编写一个程序,我打算根据stdin中的用户输入控制while循环的执行。我可以用以下三种不同的方式编写程序,如下所示:

使用scanf()函数

#include<stdio.h>
#include<string.h>

int main()
{
 char loop= 'y';
 while(loop=='y')
    {
     printf("Do you want to continue? [y|n]: ");
     scanf("%c", &loop);

     while(getchar() != '\n');
     if(loop != 'y' && loop != 'n')
        {
         printf("Error! Please enter 'y' or 'n' \n");
         loop = 'y';
        }
    }
 return 0;
}

使用fgets()函数

#include<stdio.h>
#include<string.h>

int main()
{
 char loop[5]= "yes\n";

 printf("%s",loop);
 while(strcmp(loop,"yes\n")==0)
    {
     printf("Do you want to continue? [yes|no]: ");
     if(strcmp(loop,"yes\n")!=0 && strcmp(loop,"no\n")!=0)
        printf("Error! Please Enter 'yes' or 'no'\n");
     else
        fgets(loop,5,stdin);
    }
 return 0;
}

使用conio.h中的getch()

#include<stdio.h>
#include<string.h>
#include<conio.h>

int main()
{
 char loop= 'y';
 while(loop=='y')
    {
     printf("Do you want to continue? [y|n]: ");

     loop = getch();
     printf("\n");
     if(loop != 'y' && loop != 'n')
        {
         printf("Error! Please enter 'y' or 'n' \n");
         loop = 'y';
        }
    }
 return 0;
}

虽然所有上述方法都根据用户输入执行停止或继续while循环的任务,但getch()略有不同。使用getch()后,用户无需在用户输入yn后按Enter键,程序会在用户提供输入后立即终止或继续。

我知道conio.h未包含在标准gcc库中,并且不赞成使用。但是,我想使用getch()scanf()或任何其他标准库函数来实现fgets()的功能。根据{{​​1}}的功能,我的意思是只要用户按下终端上的所需键,getch()循环就应该终止,而不需要按用户输入。

whilefgets()是否可以执行此任务?

0 个答案:

没有答案