ページ 11

少しおたずねします

Posted: 2008年7月07日(月) 11:14
by グリフィス
下の添付ファイルは,文字列を入力してそれを大文字と小文字とそれ以外の文字(+,-など)にわけて,
それぞれをカウントするプログラムなのですが、どうも結果を表示するところでうまくいきません。
どうすればよいのでしょうか?

Re:少しおたずねします

Posted: 2008年7月07日(月) 11:18
by グリフィス
最後に入力した文字列だけが出るんです。

Re:少しおたずねします

Posted: 2008年7月07日(月) 11:51
by Mist
文字配列というものについての理解が足りないように思いますが、
ソースからでは細かい部分で何をしたいのかが見えないので質問します。

> どうも結果を表示するところでうまくいきません。
あなたの考えるうまくいったきの表示状態を具体的に提示してください。
最終的にどう表示したいのかがわからないと答えにくいです。

> for(i=0; i<5; i++){
> gets(str);
> }
ループで5回getsを実行している理由は何ですか?
5行分読み込みたいというのであっても、1文字づつ5文字読み込みたいというのであっても現状では間違いだらけです。

Re:少しおたずねします

Posted: 2008年7月07日(月) 12:13
by グリフィス
最終的に、
大 小 その他
1 0 1
2 1 0

のような表示状態にしたいんです。

ループで5回getsをしてるのは、5行分のデータを入力したいんです。
ですが、入力もうまくいきません。どうすればいいのでしょうか?

Re:少しおたずねします

Posted: 2008年7月07日(月) 13:00
by Mist
入力と出力部分だけソースを修正しました。(@が付いているところ)
ただし、このプログラムは大文字、小文字、その他の文字の判定の仕方が間違っている部分についてはわざと修正していません。
ネット等でisupper、islowerの仕様(入力と戻り値)を調べて修正してください。
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char str[5][20];                                                // @
    int i, j, count1, count2, count3;
    

    // @ 変数の初期化
    memset(str, 0, sizeof(str));
    count1 = count2 = count3 = 0;
    // @

    printf("文字列を入力してください(一行19文字まで)\n");           // @
    
    //文字列の入力
    for(i=0; i<5; i++){
        printf("%d行目を入力してください : ", i+1);                 // @
        fgets(str, 20, stdin);                                   // @
    }
    printf("\n");
    
    //入力した文字列の表示
    for(j=0; j<5; j++){
        printf("%s\n", str[j]);                                     // @
    }
    printf("大           小            その他\n");
    
    // @ 文字数のカウント
    for(i=0; i<5; i++){
        count1 = count2 = count3 = 0;
        for (j = 0; j < 20; j++) {
            if ((str[j] == '\0') || (str[j] == '\n')) break;  // 文字列の終わり
            if(isupper(str[j]) == 0){        //大文字の場合
                count1++;
            }else if(islower(str[j]) == 0){      //小文字の場合
                count2++;
            }else{      //その他の場合
                count3++;
            }
        }
        printf("%-8d     %-8d     %-8d\n", count1, count2, count3);
    }
    // @
    
    return 0;
}

Re:少しおたずねします

Posted: 2008年7月07日(月) 16:22
by グリフィス
Mistさん、大変ありがとうございました。おかげで何とかなりました。