如何从C中的fgets中删除多余的字符输入?

我听说使用gets()在C编程中很糟糕,并且使用fgets更安全……所以我使用的是fgets。 但是,我遇到了fgets的问题:我输入了太多字符,不知怎的,它溢出了。

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

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

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

 answer: 123 answer2: 456 

如何删除456进入下一个fgets输入? 在为第一个fgets输入123456之后,我想要这样的输出:

 answer: 123 

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

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

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

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

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

 #include  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] = '\0'; return i; }