前回と同様、初歩的な質問ですみませんが、以下の問題がどうしても解けません……。
Q.入力した文字列sを整数に変換して返す関数を作成しなさい。
・数値はint型配列dataに格納する。
・入力が終わったらfor文を使って表示する。
・int unyo(char s[]); を使用すること。
~入力する文字列~
123
223
323
225
^Z
~結果~
データ数=4
data[0]=123
data[1]=223
data[2]=323
data[3]=225
この問題に対して僕が書いたのが以下の通りです。
#include <stdio.h>
#define MAXLINE 1000
int unyo(char s[]);
main()
{ //宣言
char s[MAXLINE]; //s[0]~s[999]
int c; //文字格納用
int n; //数字格納用
int i; //番号カウント用
int x; //回数カウント用
int d; //データ数カウント用
n=d=0; //初期化
for(i=0; i<MAXLINE-1 && (c=getchar())!=EOF; ++i)
{ //0~999の間又はEOFでない間又は改行でない間繰り返す
s[i]=c; //受け取った文字をs[i]に代入
if(c=='\n')
{ //もし改行なら
s[i]=c; //'\n'をs[i]に代入
++i; //カウントを増やす
++d;
}
}
s[i]='\0'; //入力した文字の最後に'\0'(単語の終わり)を代入
printf("データ数=%d\n", d);
for(i=0; i<d; ++i)
{
data[i]=unyo(s);
printf("data[%d]=%3d\n",i,data[i]);
}
}
int unyo(char s[])
{
int x,n,m;
for(n=x=0; '1'<=s[x]&&s[x]<='9'; ++x)
{ //入力されたのが数字の間繰り返す
n=n*10+(s[x]-'0'); //入力された数字を再現する
}
return n;
}
そこで、二週目以降、xを初期化しない方法が知りたいのです。
もし、方法がなければ他の考え方を教えていただけると幸いです。
二回目の投稿でいたらぬ点が多々あると思いますがよろしくお願いします。