- 締切済み
プログラムがうまく動きません…
与えられた文字列の文字を全て大文字に変換する関数letter2capを作成しなさい。 ただし、main関数は以下のものを使用すること。 ただし、関数letter2capではポインタを使用すること。 #include<stdio.h> #define MAXCHAR 1024 void letter2cap( char* p) { while(*p) { if ('a' <= *p && *p <= 'z') *p += ('A' - 'a'); } } int main(void){ char str[MAXCHAR]; gets( str ); letter2cap( str ); printf(゛%s\n゛, str); return 0; } どこがまずいのでしょうか?教えて下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
失礼しました。やっぱり書かないと気付きませんね。 お詫びに、下記のようなコードを提示させてください。 #include<stdio.h> #define MAX_CHAR 1024 char *letter2cap( char* p) { char *str = p; while(*str) { if ('a' <= *str && 'z' >= *str) *str += ('A' - 'a'); str++; } return p; } int main (int argc, const char * argv[]) { char str[MAX_CHAR]; if(NULL == fgets(str, MAX_CHAR, stdin)) return -1; fprintf(stdout, "%s\n",letter2cap(str)); return 0; }
- Tacosan
- ベストアンサー率23% (3656/15482)
どこが悪いかというと ・p をインクリメントしていない: ただし「*」は不要>#1. 「どこに入れるか」は「どこでインクリメントしなければならないのか」を考えればわかるはずだ. ・「小文字であること」を調べるときに islower を使っていない. ・「大文字に変換する」ときに toupper を使っていない. くらいかなぁ? gets を使ってるのも「悪い」といえば悪いかな.
ポインタをインクリメントしていない。*p++が必要ですね。
補足
どこに付け加えたらよいでしょうか?