• ベストアンサー

文字を逆転させて表示させるプログラミングなのですが・・・。

#include<stdio.h> int main() { char moji[80]; char hantai[80]; int i; int j; int n; printf("半角文字列を入力:"); scanf("%s",moji); for(n=0;moji[n]!='\0';n++); for(i=n-1,j=0,i>=0;i++;j--){ hantai[j]=moji[i]; } hantai[j]='\0'; printf("反対から:%s\n",hantai); return 0; } 反対からが表示されません。 考えたのですがわかりません。

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

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

for(i=n-1,j=0,i>=0;i++;j--){ hantai[j]=moji[i]; } において、 iが初期値 n-1 でインクリメント jが初期値 0 でデクリメントになっています。 これがきっと逆ですね。 また、 , ; の位置がおかしいです。 (終了条件が i++ で判定され、 !=0 なので すぐに条件を満たしてしまいます) 初期設定;条件;実行後動作 なので for(i=n-1,j=0;i>=0;i++,j--){ とすべきだと思います。

tomo_ko_n
質問者

お礼

ありがとうございました。 納得です。 直してコンパイルしなおします。

その他の回答 (1)

  • hegemon
  • ベストアンサー率72% (21/29)
回答No.1

>反対からが表示されません。 >考えたのですがわかりません。 もうちょっと考えましょう。 >  for(i=n-1,j=0,i>=0;i++;j--){ >    hantai[j]=moji[i]; ここ、iがn-1でjは0から始まってます。 で、j--となってるので、hantai[j]はゼロから始まってマイナスへと値をセットしてます。 思いっきり、メモリ破壊してますね。 さらに、for文の表記もおかしいです。ループ継続条件が「i++」になってるので。 >  for(n=0;moji[n]!='\0';n++); おそらく、ここで入力された文字列の最後をポイントしたいのでしょうから、この部分はこうすべきですね。   for(n=0; moji[n]!='\0'; n++);   for(i=n-1,j=0; i>=0; i--,j++){     hantai[j] = moji[i]; どこが違うのか、よく見比べてみましょう。

tomo_ko_n
質問者

お礼

よーく見比べたら分かりました!! ありがとうございます。

関連するQ&A

  • c言語のプログラミングについて聞きたいのですが

    自分は課題で「10人分の名前と点数を入力して降順に並び替える」というプログラムを作ろうとしているのですが、なかなかうまくいきません。一応↓の形までできたのですがなぜか数字が変になります。 どうしてか教えていただけないでしょうか。 #include<stdio.h> int main(void) {     int i,j;     int tensu[10][3];     char namae[10][6]; for(i=0;i<10;i++){ printf("名前の入力>>"); scanf("%s",&namae[i]); printf("点数の入力>>"); scanf("%d",tensu[i]); } printf("名前   点数\n"); for(j=0;j<10;j++) { printf("%s ",&namae[j]); printf("%10d\n",tensu[j]); } return 0; } それとポインタ?みたいなのもよく理解できず、点数で降順にしたあとに点数を使って名前を並び替えるのかなと思うのですがそれもよくわかりません。 どなたか教えてください

  • 自作関数を用いた文字の反転

    タイトルのまんまですが入力された文字を反転して表示する方法がわかりません。 #include <stdio.h> char reversecopy(char moji[]) { int i; char reversemoji[51]; for(i = 50; i > 0; i--) { reversemoji[i] = moji[i]; } return reversemoji[50]; } void main(void) { char n[51]; printf("何か文字を入力してください: "); scanf("%s" ,n); reversecopy(n); n[50] = '\0'; printf("%s\n" ,n); return; } ここまでは作ったのですが、表示されるのは反転されていない文字です。どこかおかしい点があったら(絶対あるはずですが)ご指摘いただければ助かります。 よろしくお願いしますm(_ _)m

  • C言語 文字列の比較 compare

    プログラミング初心者です。 60文字以内の文字列を入力して、 大小関係を比較・表示するプログラムなのですが・・ 「AはBより大きい」という結果しか出ません。 どこが間違っているのか、ご指摘お願いしますっ。 #include<stdio.h> int main(void) { char moji1[61]; char moji2[61]; printf("文字列Aを入力===>"); scanf("%60s" ,&moji1); printf("文字列Bを入力===>"); scanf("%60s" ,&moji2); if(moji1-moji2>0){ printf("===AはBより大きい===\n"); } else if(moji1-moji2<0){ printf("===AはBより小さい===\n"); } else if(moji1-moji2==0){ printf("===AとBは等しい===\n"); } return 0; } int compare(char *x, char*y) { while(*x==*y){ if(*x=='\0') return 0; x++; y++; } return (*x-*y); }

  • プログラミング(ポインタ/文字列処理)を教えて下さい

    プログラミング(ポインタ/文字列処理)を教えて下さい 英単語(最大で15文字まで)を*が現れるまで1つずつ読み込み、読みこんだ英単語の文字数を計算して表示するプログラムです。英単語は文字型配列を使用します。 1、関数の引数及びその中の実行文中で配列を使用 2、関数と引数及びその中の実行文中でポインタ変数を使用する この2つのプログラムを別々に作らなければならないのですが、当方関数をの使い方が今一分らないので以下のプログラムを関数での作成方法を教えて下さい。 これが関数で作らなければいけないプログラムです #include<stdio.h> int main(void) { char mojiretu[15]; int con[15]={0},i,j; printf("課題データ\n"); scanf("%s",mojiretu); while(mojiretu[0]!='*') { for(j=0;mojiretu[j]!='\0'j++) {} con[j-1]++; scanf("%s",mojiretu); } printf("文字数\t出現回数\n") for(i=0;i<=14;i++) printf("%d\t%d\n",i+1,con[i]); } こちらはポインタ変数を用いていますが関数になっていません。 #include<stdio.h> int main(void) { char mojiretu[15],*pmoji int con[15]={0},i,j; pmoji=&mojiretu[0]; printf("課題データ\n"); scanf("%s",mojiretu); while(*pmoji!='*') { for(j=0;*(pmoji+j)!='\0'j++) {} con[j-1]++; scanf("%s",mojiretu); } printf("文字数\t出現回数\n") for(i=0;i<=14;i++) printf("%d\t%d\n",i+1,con[i]); } 2つとも正常に動いてます。どちらか一つでもいいので関数での書き方を詳しくおねがいします。

  • c言語の文字列の逆順のプログラムがわかりません

    文字列を逆順して出力するプログラミングがわかりません。 #include <stdio.h> #include <string.h> void reverse(char *moji, char *gyaku); int main(void) { char x[30]; char y[30]; puts("文字を入力してください。\n"); scanf("%s", x); reverse(x, y); printf("逆順すると%sです。\n", y); return (0); } void reverse(char *moji, char *gyaku) { int i, len; len = strlen(moji); gyaku = moji + len - 1; for(i = 0; i < len; i ++){ putchar((int)*gyaku); gyaku--; } } 理想とする実行結果は 文字を入力してください。 abcdefg 逆順するとgfedcbaです。 なんですが、 上記のソースを実行すると 文字を入力してください。 abcdefg gfedcba逆順すると(謎の漢字)です。 となります。 どこがおかしいんでしょうか? よろしくおねがいします。

  • C言語 エラー表示 break の位置が誤っている(関数 main ) 

    #include<stdio.h> int main(void){ int n,i,j,k; char c='*'; printf("正の整数:"); scanf("%d",&n); if(n>0){ for(i=1;i<=n;i++){ printf("%d",i); for(j=1;j<=n+1-i;j++){ if(j==1){ if(i-1>0){ for(k=i-1;k>0;k--){ printf(" "); } } } printf("%c",c); } printf("\n"); } } break; return 0; } これをコンパイルすると「break の位置が誤っている(関数 main )」と表示されるのですが何でですか? 困ってます↓

  • 文字列で表現された時刻の変形

    文字列で表現された時刻の変形 13:23:23のような時刻を秒単位で表したいと思っています。そこで以下のように #include <stdio.h> int main() { char str[9]; int i; int j; scanf("%s",str); for(i=0;i<9;i++) printf("%c\n",str[i]); return 0; } 時刻を文字列の配列に置き換えることまでは考えつきましたが、この先に進めません。 どうしたらよいでしょうか?なお特別なライブラリなどは使用はできません。 よろしくお願い致します。

  • 質問です。

    このソースのscanf("%*c%c",&moji);の部分が分かりません。"%*c%c"はどういう意味があるのですか?また、。"%*c%c"と%cの違いは何ですか?教えてください。宜しくお願いします。 #include <stdio.h> int main(void) { char moji; printf("文字を入力 (終了するときは/) -->"); scanf("%c",&moji); for(;;){ if(moji!='/'){ printf("文字 = %2c\n",moji); printf("10進 = %2d\n",moji); printf("16進 = %2x\n",moji); printf("文字を入力 (終了するときは/)-->"); scanf("%*c%c",&moji); } else{ printf("プログラムを終了します"); break; } } return 0; }

  • abcdとキーボードで打ったらdcbaと表示されるプログラム

    C言語に関しては初心者です。 メイン関数は変更せずに行います。 /* reverse.c: reverse a given string */ #include <stdio.h> #include <string.h> void reverse(char *); /* プロトタイプ宣言 */ int main(void) { char str[100]; scanf("%s", str); reverse(str); printf("%s\n", str); return (0); } void reverse(char *s) { char n; int i; char str; n = strlen(str) - 1; for(i=0,i++,i<=100) { s[i] = *s[n-i]; printf("%s\"s[i]); } }

  • scanf文がうまくいかないのですが・・・

    下のようなプログラムを実行するとうまくいかないのですが、何故なのでしょう。 どうかお教えください。 #include<stdio.h> int main(void) { int i; char n; for(i = 0; i < 10; i++) { printf("nを入力してください>>>"); scanf("%c",&n); printf("%c\n",n); } return 0; }

専門家に質問してみよう