現在「(),[],{}のつりあいがとれていないといったプログラムの基本的な構文エラーのチェックを行うプログラムを書け。引用符・2重引用符・コメントなどの処理も忘れないこと。」 という問題を解いています。
その上で、getchar関数から入力を行い 「ctrl + d」を入力することで出力結果を得たいのですが、getchar関数の入力中にエンターキーを押すと、先にエンターキーを入力する時点までの出力がされてしまいます。
EOF(ctrl + d)を認識する前に、エンターキーを押すことでwhile文内の処理が進むのはなぜでしょうか。
どなたかご教授いただけますと幸いです。
・実行したいこと
abc//abcを入力\n //'\n'はエンターキー
cde\n
(ctrl + d)
↓上記を入力し、下記の出力結果を得たい。
abc
cde
・発生する事象
abc//abcを入力\n //'\n'はエンターキー
↓最初のエンターを押した時点で結果が出力されてしまう。
abc
int main(void) { int c, counter1 = 1, counter2 = 1; int kakko1 = 0, kakko2 = 0, kakko3 = 0; int count = 0; int a[2]; while((c = getchar()) != EOF){ if(a[0] == '/' && c != '/'){ putchar('/'); a[0] = 0; } if(c == '('){ kakko1 += 1; }else if(c == ')'){ kakko1 -= 1; }else if(c == '['){ kakko2 += 1; }else if(c == ']'){ kakko2 -= 1; }else if(c == '{'){ kakko3 += 1; }else if(c == '}'){ kakko3 -= 1; } if(c == '\''){ counter1 *= -1; putchar(c); count = 0; }else if(c == '\"'){ counter2 *= -1; putchar(c); count = 0; }else if(c == '/'){ count += 1; a[count-1] = '/'; }else{ putchar(c); count = 0; } if(counter1 == 1 && counter2 == 1 && count == 2){ while(c != '\n'){ c = getchar(); } printf("\n"); a[0] = '\0'; } } if(kakko1 != 0 || kakko2 != 0 || kakko3 != 0){ printf("カッコの釣り合いが取れてない"); } return 0; }
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。