• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:大学のプログラミング課題について)

大学のプログラミング課題について

このQ&Aのポイント
  • 大学でプログラミングの課題が出たのですが、詳しく教えてほしいです。
  • プログラムを作成しているのですが、うまくいきません。
  • どこが間違っているのか教えていただきたいです。

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

  • ベストアンサー
回答No.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; }

その他の回答 (11)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

で、どんな結果になるのですか? それが判らないとコメントのしようがないです。

関連するQ&A