- ベストアンサー
大学のプログラミング課題について
- 大学でプログラミングの課題が出たのですが、詳しく教えてほしいです。
- プログラムを作成しているのですが、うまくいきません。
- どこが間違っているのか教えていただきたいです。
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
「どこが間違っているのかも含めて教えていただけると嬉しいです。」 ↓、for()にセミコロンが付いているんでここで区切ってしまってます。これで完結してますよ。また、{} が離れちゃって別物になり下がってます。 意味ないですね。 for(i=0;t[i]>0;i++); { } それから10進コードもいいですが、これじゃ作ったあなた自身も後でアスキー一覧表見なきゃわからんでしょ? if(t[j]>=65 && t[j]<=90) { それから、手間暇かけて if()毎に1字出力するのも良いけど、見づらくありませんか。見づらいということは思考にも影響し、考えにくくするものです。 if(t[j]>=65 && t[j]<=90){ u=t[j]+32; printf("%c",u); } これを踏まえて、習った for()文を使って処理を「入力~処理~出力」に別けて見易いプログラムにします。 #include <stdio.h> #define SIZE 100 //プログラム本体をいじらなくて済みますよね int main(void) { int i,c; char t[SIZE]; //入力 printf("%d文字以下の文字列を入力してください ", SIZE-1); scanf("%s",t); //処理 for(i=0;i<SIZE;i++){ //文字配列内を添字i が移動するようにします c=t[i]; //1文字取り出します。 if(c=='\0'){ //ただし、その文字が終わりなら for()文を脱出します。 break; } if(c>='A' && c<='Z'){ //文字がA~Zなら小文字に t[i]=t[i]+32; }else if(c>='a' && c<='z'){ //文字がa~zなら大文字に t[i]=t[i]-32; }else{ t[i]='*'; } } //結果の出力(変更を加えた文字列をまとめて出力) printf("変換された文字列は「 %s 」です。\n",t); return 0; } for()文の文字配列の意味がわかったら、ポインターも考えてみてください。 /* 回答2.ポインター版 */ #include <stdio.h> #define SIZE 100 int main(void) { int i,c; char t[SIZE],*p; printf("%d文字以下の文字列を入力してください ", SIZE-1); scanf("%s",t); //処理 p=t; while((c=*p)!='\0'){ //while(c=*p){ if(c>='A' && c<='Z'){ *p+=32; }else if(c>='a' && c<='z'){ *p-=32; }else{ *p='*'; } p++; } //結果の出力 printf("変換された文字列は「 %s 」です。\n",t); return 0; }