while((c = getchar() != EOF){ switch(c){ case 'a': (処理) break; case 'b': c = getchar(); (処理) break; ・ ・ ・ ・ } }のようなプログラムがあるとき,case bのときに次の値をcに代入していますが
このときにcがEOFだった場合即座にwhileのループを抜ける方法を探しています。
教えて下さい。
while((c = getchar() != EOF){ switch(c){ case 'a': (処理) break; case 'b': c = getchar(); (処理) break; ・ ・ ・ ・ } }のようなプログラムがあるとき,case bのときに次の値をcに代入していますが
int flag = 0; while((c = getchar())!= EOF){ switch(c){ case 'a': (処理) break; case 'b': if((c = getchar()) != EOF){ (処理) } else flag = 1; break; ・ ・ ・ ・ } if(flag == 1) break; }
#include <stdio.h> int main(void) { int c; do{ switch(c = getchar()){ case 'a': puts("a"); break; case 'b': if((c = getchar()) == EOF) break; puts("b"); break; case 'c': puts("c"); break; case EOF: break; default : puts("default"); break; } }while(c != EOF); return 0; }
while((c = getchar() != EOF){ switch(c){ case 'a': (処理) break; case 'b': c = getchar(); switch(c){ case EOF: goto err; ・ ・ ・ ・ default: (処理) break; } ・ ・ ・ ・ } } err: if(c != '\n'){ putchar('\n'); } return 0; }
のような感じでgoto文を使うとgotoの所の次が [pre] err: if(c != '\n'){ putchar('\n'); } return 0; }のerrの部分ではなくreturnに飛ぶのですが・・
if( c != '\n' ) { putchar('aaaaa\n'); } else{ putchar('a'); } returnとかにソースを書き換えて、実際にプログラムがそこを通っているか確かめてみるのもいいかもしれません。