我在c中读取字符串时遇到问题。当我在if-instruction中添加gets()函数时,程序停止。
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,i = 0;
char sir[2000],ch;
printf("Press you option: "); scanf("%d",&n);
if(n == 1)
{
printf("text: "); gets(sir);
printf("\nINPUT: ");
for(i = 0;i < strlen(sir);i++)
printf("%c",sir[i]);
}
return 0;
}
任何解决方案?
答案 0 :(得分:1)
当我在if-instruction中添加gets()函数时,程序停止。
查看前面的代码。也许你输入 1 输入
printf("Press you option: ");
scanf("%d",&n);
scanf("%d",&n);
消耗'1'
,但不消耗'\n'
后来的代码
printf("text: ");
gets(sir);
然后gets()
读取'\n'
并返回sir[0] == '\0'
,空字符串。这会导致for(i = 0;i < strlen(sir);i++)
不重复for()
循环的主体。
怎么办?
阅读用户输入fgets()
的行,然后处理该字符串。请注意,此简单代码示例中未解决无效输入,EOF和缓冲区溢出处理问题。那将是第2步。
char buf[80];
printf("Press you option: ");
fgets(buf, sizeof buf, stdin);
sscanf(buf, "%d",&n);
printf("text: ");
fgets(buf, sizeof buf, stdin);
buf[strcspn(buf, "\n")] = '\0'; // lop off potential \n
strcpy(sir, buf);
答案 1 :(得分:0)
这是由于C输入缓冲区问题,只需添加一个getchar()如图所示,它会工作,让我知道任何其他帮助。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n,i = 0;
char sir[2000],ch;
printf("Press you option: "); scanf("%d",&n);
if(n == 1)
{
printf("text: ");
getchar();
gets(sir);
printf("\nINPUT: ");
for(i = 0;i < strlen(sir);i++)
printf("%c",sir[i]);
}
return 0;
}
答案 2 :(得分:0)
get()不是最近从用户那里获得输入的方法。如上所述,请使用fgets来读取输入。
回到你的问题。请fflush(stdin)以解决您的问题。尝试运行以下代码。我刚刚添加了fflush(stdin),现在用户输入由fgets()获取,并且没有程序停止发生。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n, i = 0;
char sir[2000], ch;
printf("Press you option: "); scanf("%d", &n);
if (n == 1)
{
printf("text: ");
fflush(stdin);
gets(sir);
printf("\nINPUT: ");
for (i = 0; i < strlen(sir); i++)
printf("%c", sir[i]);
}
return 0;
}
另外请阅读并理解为什么我们使用fflush以及为什么我们需要避免使用get()函数。希望我帮助过你。谢谢:))