ID非公開さん
2022/5/16 16:41
2回答
C言語練習中です。
C言語練習中です。 fgetsでいくつかの文字列を取得し、その文字列を空白ごとに各変数へ代入する方法を教えていただきたいです。 例えば"10 5 3"や”15 6 2”などがある場合、各変数a,b,c(もしくは配列で)に代入し計算できるようにしたいです。 While(fget(str,sizeof(str),stain) != NULL){} これをprintf(“%s”,str);で調べるときちんと"10 5 3"と格納されており、他の文字列も問題ないのですが、 ここからstrtokを使い、空白で区切って配列で代入してみたり、sscanfを用いて変数a,b,cに代入すると実行するたびに明らかに異なる数字に変わってしまいます。
ベストアンサー
(ID非公開) 例:sscanf()を使用した場合 #include<stdio.h> int main(void){ char str[128]; int a,b,c; while(fgets(str,128,stdin)!=NULL){ sscanf(str,"%d %d %d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); } return 0; } ~~~~~~~~~~~~~~~~~~~~ 10 12 15 a=10,b=12,c=15 1 2 3 a=1,b=2,c=3 ^Z
例:strtok()を使用した場合 #include<stdio.h> #include<string.h> #include<stdlib.h> int main(void) { char str[128]; int d[32]; int i, n=0; char *p, *q; while(fgets(str, 128, stdin)!=NULL) { p=str; q=str; while(q) { q=strtok(p, " "); p=NULL; if(q!=NULL) { d[n]=atoi(q); n++; } } printf("d[]= ") ; for(i=0; i<n; i++) printf("%d ",d[i]); putchar('\n'); } return 0; }
質問者からのお礼コメント
間違えて&をつけてしまっていたためおかしな数字を出していたようです。 詳しくコードを書いていただいたのでベストアンサーとさせていただきます。
お礼日時:5/16 21:22