ページ 11

無題

Posted: 2010年9月06日(月) 00:44
by kk
重要課題 12..1
参考12.1に示されたfgets()を使い、入力された文字列につい て,1文字ずつその文字の種類を表示し,最後に文字数を表示するプログラムを作 成せよ.文字の種類は,大文字,小文字,数字,その他の文字の4種類とすること.

fgets()では入力された目に見える文字の最後に改行コードとヌル・バイト があるので注意すること。

% ./charType
文字列(20字まで)? Rits-1 ← 文字列を入力
1文字目は R で,大文字です.
2文字目は i で,小文字です.
3文字目は t で,小文字です.
4文字目は s で,小文字です.
5文字目は - で,その他の文字です.
6文字目は 1 で,数字です.
以上6文字です.
%
という問題でわからないことがありました


自分がつくったソース↓

#include<stdio.h>

# define BUFFER_SIZE (256);

int main(void){
char buf[BUFFER_SIZE];
int i;
printf("文字列は(20字まで)?");
fgets(buf, BUFFER_SIZE, stdin);

for(i=0;buf='\n' && i < 20;i++){
if(buf>65 && 90 > buf){
printf("%d文字目は %c で大文字です\n",i+1,buf);
break;
}
else if(buf>97 && buf < 122){
printf("%d文字目は %c で小文字です\n",i+1,buf);
break;
}
else if(buf > 48 && buf){
printf("%d文字目は %c で数字です\n",i+1,buf);
break;
}
else{
printf("%d文字目はその他の文字です");
break;
}
printf("以上です\n");
return 0;
}

で6、9、30行目がエラーになります。どこを直すべきかわかる方おしえてください。

Re:無題

Posted: 2010年9月06日(月) 01:01
by 通りすがり
とりあえず

# define BUFFER_SIZE (256);

のところで#define定義は;はいらないと思われますよ。

Re:30行目

Posted: 2010年9月06日(月) 08:48
by kk
通りすがりさんのおかげでエラーが減りました。
ただ、30行目が「文法エラー at end of input」って表示されます。
どこを直せばよいでしょうか?

Re:30行目

Posted: 2010年9月06日(月) 09:05
by バグ
中括弧を字下げしてスコープを分かりやすくしてみました。
これでエラーの原因が一目瞭然ですよね?
#include <stdio.h>

# define BUFFER_SIZE (256);

int main(void)
{
    char buf[BUFFER_SIZE];
    int i;

    printf ("文字列は(20字まで)?");
    fgets (buf, BUFFER_SIZE, stdin);

    for (i = 0; buf = '\n' && i < 20; i++)
    {
        if (buf > 65 && buf < 90)
        {
            printf ("%d文字目は %c で大文字です\n", i + 1, buf);
            break;
        }
        else if (buf > 97 && buf < 122)
        {
            printf ("%d文字目は %c で小文字です\n", i + 1, buf);
            break;
        }
        else if (buf > 48 && buf)
        {
            printf ("%d文字目は %c で数字です\n", i + 1, buf);
            break;
        }
        else
        {
            printf ("%d文字目はその他の文字です");
            break;
        }

        printf ("以上です\n");
        return 0;
    }

Re:30行目

Posted: 2010年9月06日(月) 09:31
by kk
できました。ありがとうございます。