我正在使用带有stdin的fgets来读取一些数据,我读取的最大长度为25.我正在运行此代码的其中一个测试,我的数据之后有几百个空格想 - 导致程序失败。
有人可以告诉我在使用fgets时如何忽略所有这些额外空格并转到下一行吗?
答案 0 :(得分:2)
迭代地使用fgets()
,然后扫描字符串以查看它是否是所有空格(以及是否以换行符结束)并忽略它(如果是)。或者在循环中使用getc()
或getchar()
?
char buffer[26];
while (fgets(buffer, sizeof(buffer), stdin) != 0)
{
...process the first 25 characters...
int c;
while ((c = getchar()) != EOF && c != '\n')
;
}
该代码只会忽略直到下一个换行符的所有字符。如果你想确保它们是空格,在(内部)循环中添加一个测试 - 但如果角色不是空格,你必须决定该怎么做。
答案 1 :(得分:0)
明白Jonathan Leffler关于getc()的建议:
我假设你有一个这样的循环:
while (!feof(stdin)) {
fgets(buf, 25, stdin);
...
}
像这样改变:
while (!feof(stdin)) {
int read = fgets(buf, 27, stdin);
if (read > 26) { // the line was *at least* as long as the buffer
while ('\n' != getc()); // discard everything until the newline character
}
...
}
编辑:啊,Jonathan比我写C更快。:)
答案 2 :(得分:0)
尝试使用此代码删除尾随空格。
char str[100] ;
int i ;
fgets ( str , 80 , stdin ) ;
for ( i=strlen(str) ; i>0 ; i-- )
{
if ( str[i] != ' ' )
{
str[i+1]='\0';
break ;
}
}