• ベストアンサー

どうやっても上手くいきません…

与えられた文字列の文字を全て大文字に変換する関数letter2capを作成しなさい。ただし、main関数は以下のものを使用すること。 ただし、関数letter2capではポインタを使用すること。 #include<stdio.h> #define MAXCHAR 1024 void letter2cap( char* p) { while(*p); p++; { if ('a' <= *p && *p <= 'z') *p += ('A' - 'a'); } } int main(void){ char str[MAXCHAR]; gets( str ); letter2cap( str ); printf(゛%sn゛, str); return 0; } どこがまずいのでしょうか?教えて下さい 宜しくお願いします 【現時点での実行結果】 ./p242 abc abc abc : : 【実行したい結果】 ./p242 abc ABC

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> while(*p); 無限ループになるんじゃないの? pをインクリメントする位置が違います。位置がわからないのは、なぜインクリメントする必要があるかを理解していないからです。 1つ前の質問に対する回答をよく読んでみましょう。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

while(*p); //★ これ、意味が無い。条件式+空文だから p++; //★先にインクリメントしたら、最初の文字はどうなるの? { //★この{}は無意味 whileは;で閉じてしまっている。 if ('a' <= *p && *p <= 'z') //★う~ん(スマートじゃない) *p += ('A' - 'a'); //★これも } while ( *p ) { //ここで{を使う。whileの影響範囲を指定する。   if ( islower(*p) ) { //こっちの方がオシャレじゃない?     *p = toupper(*p); //同上   }   p++; //ここで、次の文字に移る。 } //whileの影響範囲の終端 ctype.h をincludeして下さい。

archerry09
質問者

お礼

無事解決いたしました。ありがとうございました。

関連するQ&A