stdin で fgets を使用して一部のデータを読み取ります。最大長は 25 です。このコードで実行しているテストの 1 つでは、必要なデータの後に数百のスペースがあります。プログラムが失敗します。
fgets を使用するときにこれらの余分なスペースをすべて無視して次の行に移動する方法について、誰かが私にアドバイスできますか?
繰り返し使用fgets()し、文字列をスキャンして、すべてがスペースかどうか (および改行で終わるかどうか) を確認し、スペースの場合は無視します。または、代わりにgetc()orgetchar()をループで使用しますか?
char buffer[26];
while (fgets(buffer, sizeof(buffer), stdin) != 0)
{
...process the first 25 characters...
int c;
while ((c = getchar()) != EOF && c != '\n')
;
}
そのコードは、次の改行までのすべての文字を単純に無視します。それらがスペースであることを確認したい場合は、(内側の)ループにテストを追加しますが、文字がスペースでない場合にどうするかを決定する必要があります。
getc() に関する Jonathan Leffler の提案を詳しく説明します。
次のようなループがあるとします。
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
}
...
}
編集: ああ、ジョナサンは私が C を書くよりも速い. :)
末尾のスペースを削除するには、このコードを試してください。
char str[100] ;
int i ;
fgets ( str , 80 , stdin ) ;
for ( i=strlen(str) ; i>0 ; i-- )
{
if ( str[i] != ' ' )
{
str[i+1]='\0';
break ;
}
}