限定しりとり

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を入力で終了、これまで格納していた文字列の表示

簡単なプログラムの流れとしては上記の感じです
よろしくお願いします。

A 回答 (13件中11~13件)

"quit"を受け取る場所がないので、今のままではどうにもなりませんね。


scanf()で一度文字列として受け取り、"quit"でない場合はsscanf()で値として取り込む。
ってところでしょうかね。

"quit"のみなのか、"Quit"とか"quit."とか許容するかでいろいろ変わりますけど。

>quitを入力で終了、これまで格納していた文字列の表示

「文字列」ではなく「値」の表示になっていますがそこらヘンはOKですか?
    • good
    • 0
この回答へのお礼

quitのみで大丈夫です;
すいません説明不足でした;

文字列じゃなくて値でOKです
すいません;;;

お礼日時:2014/09/08 13:48

考え方としては、文字入力のところをすべて、charの配列に入力するようにして、


"quit"でなければ、atof関数でdouble型に変換するという方法にプログラムを
書き換えてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/09/08 13:49

>strcmp関数を使うとは思う



たぶん、そうでしょうね。

>strcmp関数はchar型なのでエラーが出てしまいます

どこがchar型であると思われていますか?

また、エラーが出る、とは、
どんなコードを書いて
何をしたときに
どんなエラーが出るのですか?
そこを具体的に説明しないと、
ここにいる人たちは超能力者ではありませんので、
質問者さんの状況は何もわかりません。
    • good
    • 0
この回答へのお礼

そうですよね;すいません;
色々わからなかったので
はじめっからやり直してみました;



#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言語は今月入って初めてやるので本当に意味が…
すいません;

お礼日時:2014/09/08 13:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!