我无法打印使用“gets”函数读取的字符串

时间:2016-06-21 02:20:44

标签: c

如果我首先读取字符串值然后读取int值,它就有效。 我尝试使用函数gets而不是scanf,因为gets允许我在同一行中读取多个单词。

我也尝试使用fgets,但它遇到了同样的问题。

我正在使用cygwin 32位编译器版本2.874。我使用的是codeblocks ide 13.12。

#include <stdio.h>
#include <stdlib.h>

int main() {
    int i;
    char s[10];

    printf("Value int:\n");
    scanf("%d",&i);
    printf("%d\n",i);

    printf("Value string:");
    fflush(stdin);
    gets(s);
    printf("%s\n",s);

    getchar();
    return 0;
}

2 个答案:

答案 0 :(得分:2)

调用scanf后,输入缓冲区中会留下换行符。因此,当您致电gets时,只需提取换行符即可。

根据C标准,调用fflush(stdin)是未定义的行为,尽管MSVC支持它作为扩展。您应该使用getchar从缓冲区中读取换行符。

答案 1 :(得分:0)

当您输入整数时,第二个输入将采用新行,请使用scanf尝试:

scanf(" %s", s); // here the space will emit the previous newline or space

或者更好地使用fgets,这会将输入限制为缓冲区的大小:

fgets(s, sizeof s, stdin);

另外,不要使用gets,它很危险并且会受到缓冲区溢出的影响。并且不要在fflush上调用stdinstdin是输入流,刷新它是未定义的行为。