ID非公開

2020/9/18 16:57

11回答

c言語についてです

c言語についてです 添字演算子を使わずに、読み込んだ文字列を全て大文字にしたものと全て小文字にしたものそれぞれを表示するプログラムを作りたいです。 写真のものを実行すると(エラー文はでません)、選択しているAまでは表示されますが、それ以降は実行が勝手に終了します。このprintfを2行下げると表示されなくなるので原因はwhile文か、while文の中身だと思います。(str_tolowerという関数も同様にaはこの行までしか表示されずwhile文が怪しいです) 試行錯誤のため、配列の中身をstr_to upper関数は*s++、str_tolower関数では*(s+i)を用いているという違いがあります。 どこを直せば良いでしょうか。宜しければお力添え下さい。

画像

ベストアンサー

0

~直し方~ main 内にある str を次のように変えます。 【修正前】char *str; 【修正後】char str[256]; それと、scanf の呼び出しも次のようにします。 【修正前】scanf("%c",&str); 【修正後】scanf("%s", str); その上で、str_toupper の内部を次のようにします。 【修正前】*str++ = toupper(*s++); 【修正後】*str = toupper(*str);

ID非公開

質問者

2020/9/18 18:03

丁寧にありがとうございます。 問題集の指定により添字演算子を使用できないので、配列による文字列ではなくポインタによる文字列を使用したいです! ですので3つ目の修正点のみ直し実行しましたが先程と同様、while文の中に入ってはいるものの1周する前に実行停止している感じです…><

ThanksImg質問者からのお礼コメント

正しく実行できました!!!! 丁寧に分かりやすくご回答くださって、本当にありがとうございました!!!!

お礼日時:9/18 18:40