1

我不明白为什么这段代码不能正常工作:

#include<stdio.h>

    int main()
{
    char string [100];
    int a;
    printf(">");
    scanf("%d", &a);
    printf(">");
    gets(string);
    printf("%s\n", string);
}

这是我必须构建的程序的一小部分,我不明白为什么在通过 scanf() 函数获取值后,程序只是跳过或没有通过 gets() 函数正确读取字符串。如果您将代码复制到编译器并尝试运行,您就会明白我的意思。

4

2 回答 2

3

说明%d符不吃换行符(或其他空白)。尝试这个:

scanf("%d ", &a);
         ^

该空间使scanf扔掉所有空白,直到非空白为止。顺便说一句,您的问题与此C FAQ非常相似。


  • 不要使用gets,它太糟糕了,它甚至不再是语言了。fgets改为使用
  • 不要相信任何建议fflush(stdin)你的问题的人
于 2012-05-30T16:19:41.707 回答
0

每当您需要阅读由空格组成的句子时(在任何 scanf 之后),请将您的 scanf 修改为:

scanf(" [^\n]", mystring);
       ^ Space here.

看看你的例子:

#include<stdio.h>

int main(void)
{
    char mystring[100];
    int a;

    printf(">");
    scanf("%d", &a);

    printf(">");
    scanf(" %[^\n]", mystring);

    printf("Number:%d\nString: %s\n", a, mystring);

    return 0;
}
于 2015-01-02T21:45:08.730 回答