如何解决这个 gets() 函数问题?
How to solve this gets() function problem?
在我的程序中,如果我使用 scanf()
,程序运行良好。但很明显,如果 scanf()
遇到空格,它会停止读取输入。所以,我改用 gets()
。但问题是我必须使用 gets(name[i]);
两次。如果我只使用它一次,它会跳过 'Subject Name' 输入并跳转到 'Grade' 输入。
你能告诉我问题出在哪里吗?
这是代码,我删除了几乎所有不相关的部分。
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void selection1();
int main()
{
int op;
printf("\n\t\t\t\t\t\t\t\tCHOOSE A NUMBER FROM 0 to 4: ");
scanf("%d", &op);
switch(op)
{
case 0:
exit(0);
break;
case 1:
selection1();
break;
case 2:
//selection2();
break;
case 3:
//selection3();
break;
case 4:
//selection4();
break;
default:
printf("\t\t\t\t\t\t\t\tInvalid Selection!!!\n");
break;
}
return 0;
}
void selection1()
{
char name[20][50], grade[20][5];
double credit[20][2];
int i=0;
for(;;)
{
printf("\t\t\t\t\t\t\t\tEnter Subject Name: ");
gets(name[i]);
//gets(name[i]);
printf("\t\t\t\t\t\t\t\tEnter Grade: ");
scanf("%s", &grade[i]);
printf("\t\t\t\t\t\t\t\tEnter The Course Credits: ");
scanf("%lf", &credit[i]);
}
}
所以,我发现使用 scanf(" %[^\n]%*c", &name[i]);
而不是 gets(name[i]);
可以解决问题。感谢所有发表评论的人。您的评论帮助我得出了这个答案:)
在我的程序中,如果我使用 scanf()
,程序运行良好。但很明显,如果 scanf()
遇到空格,它会停止读取输入。所以,我改用 gets()
。但问题是我必须使用 gets(name[i]);
两次。如果我只使用它一次,它会跳过 'Subject Name' 输入并跳转到 'Grade' 输入。
你能告诉我问题出在哪里吗? 这是代码,我删除了几乎所有不相关的部分。
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void selection1();
int main()
{
int op;
printf("\n\t\t\t\t\t\t\t\tCHOOSE A NUMBER FROM 0 to 4: ");
scanf("%d", &op);
switch(op)
{
case 0:
exit(0);
break;
case 1:
selection1();
break;
case 2:
//selection2();
break;
case 3:
//selection3();
break;
case 4:
//selection4();
break;
default:
printf("\t\t\t\t\t\t\t\tInvalid Selection!!!\n");
break;
}
return 0;
}
void selection1()
{
char name[20][50], grade[20][5];
double credit[20][2];
int i=0;
for(;;)
{
printf("\t\t\t\t\t\t\t\tEnter Subject Name: ");
gets(name[i]);
//gets(name[i]);
printf("\t\t\t\t\t\t\t\tEnter Grade: ");
scanf("%s", &grade[i]);
printf("\t\t\t\t\t\t\t\tEnter The Course Credits: ");
scanf("%lf", &credit[i]);
}
}
所以,我发现使用 scanf(" %[^\n]%*c", &name[i]);
而不是 gets(name[i]);
可以解决问题。感谢所有发表评论的人。您的评论帮助我得出了这个答案:)