在if if中读取c中的字符串

时间:2017-01-03 17:22:28

标签: c string if-statement

我在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;
}

任何解决方案?

3 个答案:

答案 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()函数。希望我帮助过你。谢谢:))