• 締切済み

C言語・標準入力でquitを入力で終わるプログラム

C言語標準入力でquitを入力で終わるプログラムを作っているのですが うまくいきません #include <stdio.h> int main(void) { int i, n; double data[100]; printf("数字を入力してください。\n"); printf("入力を終えるときにはCtrl-dを押してください。\n"); n = 0; while (scanf("%lf", &data[n]) != EOF) { n++; } for (i=0; i<n; i++) { printf("data[%d] = %f\n", i, data[i]); } return (0); } と今はとりあえづ作ってみたのですが 今のままではCtrl-dでループから抜ける形になっています strcmp関数を使うとは思うのですが strcmp関数はchar型なのでエラーが出てしまいます; このやり方じゃないchar型にしてやり直さないといけないでしょうか; Linux CentOS gcc でやっています 標準入力で数字を入力しそれを格納 quitを入力するまで繰り返す quitを入力で終了、これまで格納していた文字列の表示 簡単なプログラムの流れとしては上記の感じです よろしくお願いします。

みんなの回答

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

"quit"を受け取る場所がないので、今のままではどうにもなりませんね。 scanf()で一度文字列として受け取り、"quit"でない場合はsscanf()で値として取り込む。 ってところでしょうかね。 "quit"のみなのか、"Quit"とか"quit."とか許容するかでいろいろ変わりますけど。 >quitを入力で終了、これまで格納していた文字列の表示 「文字列」ではなく「値」の表示になっていますがそこらヘンはOKですか?

haruyouse
質問者

お礼

quitのみで大丈夫です; すいません説明不足でした; 文字列じゃなくて値でOKです すいません;;;

  • tsunji
  • ベストアンサー率20% (196/958)
回答No.2

考え方としては、文字入力のところをすべて、charの配列に入力するようにして、 "quit"でなければ、atof関数でdouble型に変換するという方法にプログラムを 書き換えてください。

haruyouse
質問者

お礼

atof関数ですか atof関数は使ったことなかったので ちょっとggってみます;

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

>strcmp関数を使うとは思う たぶん、そうでしょうね。 >strcmp関数はchar型なのでエラーが出てしまいます どこがchar型であると思われていますか? また、エラーが出る、とは、 どんなコードを書いて 何をしたときに どんなエラーが出るのですか? そこを具体的に説明しないと、 ここにいる人たちは超能力者ではありませんので、 質問者さんの状況は何もわかりません。

haruyouse
質問者

お礼

そうですよね;すいません; 色々わからなかったので はじめっからやり直してみました; #include <stdio.h> #include <string.h> int main(void) { int i,n,quit; char str[10][10]; printf("プログラムを終了するにはquitを入力してください\n"); n = 0; do { while(scanf("%s",str[n])); if(!(quit=strcmp(str,"quit\n") == 0 || n == 10)) { n++; } for(i=0;i<n;i++) { printf("str[%s] = %s\n",i,str[i]); } return 0; } gccでのコンファイル時のエラー↓ #ファイル名#:15:警告:passing argument 1 of 'strcmp' from incompatible pointer type /usr/include/string.h:143: note: expwcted 'const char *' but argment is of type 'char (*)[10]' #ファイル名#:24: error: expected 'while' at end of input #ファイル名#:24: error: expected declaration or statement at end of input こんな感じになってしまいました; C言語は今月入って初めてやるので本当に意味が… すいません;

関連するQ&A