• 締切済み

c言語についてです。

文字の順番を逆さまにするプログラムなのですが実行してenterキーを押しても何もおこりません。原因がわかる方がいたら教えてほしいです。 初歩的な質問ですみません。 使っているパソコンはMacBookProです。 #include<stdio.h> void reverse(char[],char[]); void divide(char[],char[]); int main(void) { char s[100],t[100]; gets(s); reverse(s,t); divide(t,s); printf("%s %s\n",s,t); return 0; } void reverse(char s[],char t[]) { int i=0,j=0; while(s[i]!=0){ i++; } i--; while(i>=0){ t[j]=s[i]; i--; j++; } t[j]=0; return ; } void divide(char t[],char s[]){ int i=0,j=0; while(t[j]!=' '){ i++; } t[i]=0; i++; while(t[i]!=0){ s[j]=t[i]; j++; i++; } s[j]=0; return ; }

みんなの回答

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.2

gets()は どうやら警告が出る様ですね。(でも、実行はするはずだと思いますが) 取りあえず、下記のアドバイスの様に、fgets()を使ってみてください。 http://okwave.jp/qa/q783937.html ご参考に。

semi0022
質問者

お礼

すみません 間違えました。 できました! 12345 112345 112345 \300_\377 543211 このように最初と最後が逆さまになりました! 真ん中には意味のわからない数字がありますが。 ありがとうございます!

semi0022
質問者

補足

できました! 12345 112345 112345 \300_\377 543211 このように最初と最後が逆さまになりました! 真ん中には意味のわからない数字がありますが。 ありがとうございます!

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.1

取りあえず、気づいた点だけですが、 divide() の 最初のwhile() 文で、  t[ j(ジェイ) ] は t[ i (アイ) ] の間違い。 (何も起こらないというより、プログラムが終了しないのではないですか?) また、入力文字列中に スペースが 一つ だけ入る前提となっている様ですが、スペースがない場合、プログラムが終了しないです。スペースを見つける時、その前にNULL(0)を見つけたら、文字列分割をスキップする様にしないとならないですね。 まずは、デバック時は、必ずスペースを入れる様にして、gets()直後、reverse() の直後、でprintf()文を入れてみて、デバッグを進めてみてください。 あと、 s[ j ] = t[i]; j++; i++; は、 s[ j++ ] = t[ i++ ]; とも書くことが出来るので、この方が上記の様なミスが少なくなります。 ご参考に。 ご参考に。

semi0022
質問者

お礼

回答ありがとうございます。 t[j]をt[i]に直し、 printfを入れてみたのですが実行結果が 「warning: this program uses gets(), which is unsafe.」 となるだけで実行されませんでした。