• ベストアンサー

分岐について

「y」もしくは「n」が入力された時、ループから抜けるプログラムを作りたいとおもっています。 一応作ってはみたのですが、なんかスッキリとしない感じなので、 もっと簡単な方法がありましたら教えてもらえないでしょうか? #include <stdio.h> #include <string.h> int main(void) { int cnt; char judge[256]; cnt = 0; memset(&judge[0],'\0',sizeof(judge)); while(1) { printf("y or n : "); fgets(&judge[0],sizeof(judge),stdin); for(cnt = 0 ; judge[cnt] != '\0' ; cnt++) { if(judge[cnt] == '\n') { judge[cnt] = '\0'; break; } } if((judge[0] == 'y' && judge[1] == '\0') || (judge[0] == 'n' && judge[1] == '\0')) { break; } printf("\nError. Input y or n.\n"); } return 0; }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#include <stdio.h> #include <string.h> int main(void) { char buf[256]; while ( 1 ) { memset( buf, '\0', sizeof( buf ) ); printf( "y or n :" ); fgets( buf, sizeof( buf ), stdin ); if ( strncmp( buf, "y\n", sizeof( buf ) ) == 0 ) break; if ( strncmp( buf, "n\n", sizeof( buf ) ) == 0 ) break; puts( "Error. Input y or n.\n" ); } return 0; } 変数名は一部変えてあります。 改行コードを'\0'で置き換えたり一寸無駄があるかな?

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

getchar(),tolower()なんかを使ってみたらどうでしょう

noname#16765
noname#16765
回答No.4

自分もそれをこの前作りました。 char *str:入力したい文字(文字列は無理) char *format,... :printfと同じ引数(表示したいメッセージ) 使い方:a = Input_True_char("ny","y or n :") これでnかyしか選べません #include<stdlib.h> char Input_True_char(char *str,char *format,...) { char mozi; va_list args; va_start(args,format); do{ vfprintf(stdout,format,args); rewind(stdin); mozi = getchar(); }while(strchr(str,mozi) == NULL); va_end(args); return mozi; }

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

まず、&judge[0]は間違ってないけど普通は単にjudgeと書きますね。 あとは文字列操作のライブラリ関数を活用しましょう。 改行文字を探している部分はindexを使える。 char *p; p = index(judge, '\n'); if (p!=NULL) {  *p = '\0'; } 文字列の比較にはstrncmpが使える。 if (strncmp(judge, "y", sizeof(judge))==0||strncmp(judge, "n", sizeof(judge))==0) { ... }

回答No.1

なにがどうスッキリしないのか考えるといいと思います。

関連するQ&A