改行やその他のさまざまな文字を含むことができる2つの文字列を読み取ることになっているプログラムを書いています。したがって、EOF(Ctrl-ZまたはCtrl-D)を使用して文字列を終了しています。
これは最初の変数では問題なく機能しますが、2番目の変数では、明らかに何かが入力バッファーにスタックしていて、ユーザーが何も入力できないため、これは問題があるようです。
while (getchar() != '\n');
いくつかの同様のバリエーションでバッファをクリーンアップしようとしましたが、何も役に立たないようです。すべてのクリーニングの試行は無限ループになり、クリーニングなしでは、2番目の変数を追加することは不可能です。
両方の変数の文字は、次のようなループで読み取られます。while((c = getchar()) != EOF)
これは、バッファーに残っているのがEOFであることを示しています。それとも、他の方法でプログラムの動作に影響を与えますか?私が使用しているロジックに何か問題がありますか?
これに何時間も苦労した後、私は少し必死になり始めています。
コード:
#include <stdio.h>
#include <string.h>
int main(void)
{
int x = 0;
int c;
char a[100];
char b[100];
printf("Enter a: ");
while((c = getchar()) != EOF)
{
a[x] = c;
x++;
}
a[x] = '\0';
x = 0;
/*while (getchar() != '\n'); - the non-working loop*/
printf("\nEnter b: ");
while((c = getchar()) != EOF)
{
b[x] = c;
x++;
}
b[x] = '\0';
printf("\n\nResults:\na: %s\n", a);
printf("b: %s\n", b);
return(0);
}