文字列と配列、whileの文で困ってると思います。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mokopoko

文字列と配列、whileの文で困ってると思います。

#1

投稿記事 by mokopoko » 14年前

はじめまして。
何冊か本(特に独習C)を読みながら打ちはじめて一週間の初心者です。
半角スペースを含む文字列(英単語)を、半角スペースごとに区切り、配列の要素にして並べて表示するというプログラムを書いています。
が、エラーがたくさん出ております。一番気になっているのはwhileです。

whileの使い方がわかってないと思います。
while文には、
半角スペースでなければ、配列の要素として代入している。
というつもりにしたいのです。

どなたか助けていただけないでしょうか?よろしくお願いします。

コード:

#include <stdio.h>

int main (int argc, const char * argv[])
{
    int i;
    char str[0][30], str2[20][30];
    char *d;
    gets(str);
    i = 0;
    d = str;
    for (; str[0][i]; i++) {
        printf("%c", str[0][i]);
        *d = str[0][i];
        printf("%c", *d);
        while (*d != ' ') str2[i][30] = *d; //◆ここ 修正 by softya(ソフト屋)
        printf("%c \n", str2[20][30]);
        *d++;
    }
    int Num =  sizeof d /sizeof d[0];
    for (int h = 0; h <= Num; h++) {
        printf("%c \n", str2[h][30]);
    }
    return 0;
}


アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列と配列、whileの文で困ってると思います。

#2

投稿記事 by softya(ソフト屋) » 14年前

強調表示はコード内など使えない場合がありますのでプレビューで必ず確認してくださいね。今回は修正しておきました。
それとプログラム自体に色々問題があるのは分かりますがエラーコードを貼って頂けますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mokopoko

Re: 文字列と配列、whileの文で困ってると思います。

#3

投稿記事 by mokopoko » 14年前

ご返信、修正有り難うございます。よろしくお願いします。

①Xcodeでやっていて、常時、黄色くなってる箇所は次の通りです。
get(str);//incompatible pointer types passing 'char[0][30]'to parameter of type 'char *'
d = str;//incompatible pointer types assigning to 'char*' from 'char[0][30]'
while (*d != ' ')//Expression result unusedまたは//array index of '30' indexes past the end of an array (that contains 30 elements
printf("%c \n", str2[20][30]);//array index of '30' indexes past the end of an array (that contains 30 elements
printf("%c \n", str2[20][30];//array index of '30' indexes past the end of an array (that contains 30 elements)

②出力結果はなにもでてきません。 
whileのところに矢印がでてきます。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 文字列と配列、whileの文で困ってると思います。

#4

投稿記事 by softya(ソフト屋) » 14年前

まず、配列についてですがchar str[0][30]と宣言は出来ません。char str[0]は要素数が0個なので利用上大問題です。
[補足] 正確に書くと定義はできますが事実上使えないです。
それとget(str);とd = str;は型としてchar *strかchar str[30];じゃないとダメです。char str[0][30]は型が違うのでNGです。
やりたいことからするとchar str[30];じゃないかと思います。
while (*d != ' ')に関しても後ろの文の問題でエラーです。
あと他のエラーですが、配列はchar str[30];とか書いたら添字は0から29の範囲ですので、str2[20][30]は明らかに間違いです。あと固定値で意味が無いのも問題です。

全体的に文字列、配列、ポインタの理解不足が原因ですので、全部いっぺんに扱うような事は避けて文字列と配列だけで片付くように最初は組んでみると良いと思います。
それと間違えやすいので次のように書くことをおすすめします。

コード:

while (*d != ' ') str2[i][30] = *d;
 ↓
while (*d != ' ') {
	str2[i][30] = *d;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る