みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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 ;
}

投稿日時 - 2013-01-18 11:49:40

QNo.7897686

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

gets()は どうやら警告が出る様ですね。(でも、実行はするはずだと思いますが)

取りあえず、下記のアドバイスの様に、fgets()を使ってみてください。
http://okwave.jp/qa/q783937.html

ご参考に。

投稿日時 - 2013-01-18 17:30:20

補足

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

投稿日時 - 2013-01-18 20:49:05

お礼

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

投稿日時 - 2013-01-18 20:49:45

ANo.1

取りあえず、気づいた点だけですが、

divide() の 最初のwhile() 文で、  t[ j(ジェイ) ] は t[ i (アイ) ] の間違い。
(何も起こらないというより、プログラムが終了しないのではないですか?)


また、入力文字列中に スペースが 一つ だけ入る前提となっている様ですが、スペースがない場合、プログラムが終了しないです。スペースを見つける時、その前にNULL(0)を見つけたら、文字列分割をスキップする様にしないとならないですね。

まずは、デバック時は、必ずスペースを入れる様にして、gets()直後、reverse() の直後、でprintf()文を入れてみて、デバッグを進めてみてください。



あと、
s[ j ] = t[i];
j++;
i++;
は、
s[ j++ ] = t[ i++ ];
とも書くことが出来るので、この方が上記の様なミスが少なくなります。

ご参考に。



ご参考に。

投稿日時 - 2013-01-18 12:39:19

お礼

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

投稿日時 - 2013-01-18 13:53:23

あなたにオススメの質問