###while文の中ですすんだ分だけポインタを戻したい
C言語で
5
a 70 78 82 57 74
d 68 81 81 60 78
e 63 76 55 80 75
j 90 100 96 10 10
o 88 78 81 97 93
という入力に対して
a 70 78 82 57 74
d 68 81 81 60 78
e 63 76 55 80 75
j 90 100 96 10 10
o 88 78 81 97 93
という出力をするプログラムを作っています。
(型は、左から順に、char,int,int,int,int,int)
一行目の分はうまくできるのですが、それ以降はポインタの初期化がちゃんとできなくて、文字列の代入がうまくいっていません。
ポインタの使い方がおかしいとは思うのですが、どこがどうおかしいのかがまったく分かりません。
ご教示いただけるとうれしいです。よろしくお願いいたします。
###該当のソースコード
#include <stdio.h> #include<stdlib.h> int main(void){ int N=0; //1行目に入力された値を格納する変数 char t[1000]; char *pt=t; int e[1000],m[1000],s[1000],j[1000],g[1000]; int *pe=e,*pm=m,*ps=s,*pj=j,*pg=g; char str[1000]; char *pp=str; int flag=0; int i=0; char s1[100],s2[100],s3[100],s4[100],s5[100]; char *p1=s1,*p2=s2,*p3=s3,*p4=s4,*p5=s5; //1行目の数字の格納 fgets(str, sizeof(str), stdin); N=atoi(str); //二行目以降の文字列を格納していく for(i=0;i<N;i++){ //pp=str; fgets(str, sizeof(str), stdin); printf("%s",str); while(*pp){ if(*pp==' '){ flag++; pp++; }else if(flag==0){ *pt++=*pp++; }else if(flag==1){ *p1++=*pp++; *p1='\0'; }else if(flag==2){ *p2++=*pp++; *p2='\0'; }else if(flag==3){ *p3++=*pp++; *p3='\0'; }else if(flag==4){ *p4++=*pp++; *p4='\0'; }else if(flag==5){ *p5++=*pp++; *p5='\0'; } } *pe=atoi(s1);*pm=atoi(s2);*ps=atoi(s3);*pj=atoi(s4);*pg=atoi(s5); printf("%c ",t[0]); printf("%d %d %d %d %d\n",*pe,*pm,*ps,*pj,*pg); pt++;pe++;pm++;ps++;pj++;pg++; } return 0; }
###試したこと
while文で、ポインタppのアドレスが変わっているため、pp=strで再初期化しようとしたが、うまくいかなかった。
進んだ分だけカウントして、そのぶんpp--を繰り返す。ということも試したがうまくいかなかった。
###補足情報(言語/FW/ツール等のバージョンなど)
C言語
###追記
別のエラーがでてきたため、プログラムは完成していませんが、自分で試行錯誤できる余地が有り、質問内容がかなり変わってくることが予想されるので、ベストアンサーを決定いたしました。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/26 06:39