如何删除额外的字符输入从fgets在C



我听说使用gets()在C编程中很糟糕,使用fgets更安全…所以我用了fgets。然而,我遇到了一个问题:我输入了太多的字符,不知何故,它溢出了。

如何摆脱额外的输入字符?

char answer[4];
char answer2[4];
fgets(answer,sizeof(answer),stdin);
printf("answer: %sn",answer);
fgets(answer2,sizeof(answer2),stdin);
printf("answer2: %sn",answer2);

例如,对于第一个fgets,我输入123456,得到的输出是

answer: 123
answer2: 456

我如何从进入下一个fgets输入中删除456 ?在第一个fgets输入123456后,我希望输出如下所示:

answer: 123

然后,用户继续输入下一个fgets…

fgets(answer,sizeof(answer),stdin);
printf("answer: %sn",answer);
if(!strchr(answer, 'n'))     //newline does not exist
    while(fgetc(stdin)!='n');//discard until newline
fgets(answer2,sizeof(answer2),stdin);

您可能还对getline()感兴趣。

#include <stdio.h>
int main()
{
        char *inpt;
        size_t len = 1024;
        size_t n;
        n = getline(&inpt, &len, stdin);
        inpt[n - 1] = '';
        printf("%s", inpt);
        return 0;
}

我有时也喜欢使用我自己编写的getline()的小修改版本。它完全抛弃了尾随的换行符。

#include <stdio.h>
size_t mygetline(char *, size_t);
int main()
{
        char inpt[1024];
        mygetline(inpt, 1024);
        printf("%s", inpt);
        return 0;
}
size_t mygetline(char *s, size_t lim)
{
        int c;
        size_t i;
        for ( i = 0 ; i < lim-1 && (c=getchar()) != 'n' ; ++i )
                s[i] = c;
        s[i] = '';
        return i;
}

相关内容

  • 没有找到相关文章

最新更新