fgets无法在C linux中运行

时间:2014-03-21 06:53:37

标签: c linux fgets

在C linux中使用char或string输入时,我总觉得很多问题。看看这个编程。它不接受用户的输入。请帮忙。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char *buf;
    int msglen;
    printf("\nEnter message length\t");
    scanf("%d",&msglen);       

    buf=malloc(msglen);

    //memset(buf,'\0',msglen+1);
    printf("\nEnter data\t");
    fflush(stdin);
    fgets(buf,msglen,stdin); //NOT WORKING

    fputs(buf,stdout);
    return 0;
}   

谢谢:)

3 个答案:

答案 0 :(得分:2)

fflush()用于刷新output streams,但不清除stdin中剩余的字符。首先使用gets()getchar()EOF移除stdin

答案 1 :(得分:1)

使用getchar()代替fflush(),它有效。

答案 2 :(得分:1)

当您使用scanf("%d"....)读取整数时,它不会从输入流中删除换行符。因此,当您稍后致电fgets时,它会读取并找到换行符,即您读取一个空行。

要阅读下一行,您需要使用该换行符,例如: {/ 1}}正如别人建议的那样。

当您将格式化的I / O(getchar())与未格式化的I / O混合时,这种问题很常见。