如何删除从 C 中的 fgets 输入的额外字符?
How to remove extra characters input from fgets in C?
我听说在 C 编程中使用 gets() 不好,使用 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
如何从进入下一个 fgets 输入中删除 456?在为第一个 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 <stdio.h>
int main()
{
char *inpt;
size_t len = 1024;
size_t n;
n = getline(&inpt, &len, stdin);
inpt[n - 1] = '[=10=]';
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] = '[=11=]';
return i;
}
我听说在 C 编程中使用 gets() 不好,使用 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
如何从进入下一个 fgets 输入中删除 456?在为第一个 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 <stdio.h>
int main()
{
char *inpt;
size_t len = 1024;
size_t n;
n = getline(&inpt, &len, stdin);
inpt[n - 1] = '[=10=]';
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] = '[=11=]';
return i;
}