2010-12-02 2 views
1

文字列を後方に印刷したいと思います。しかし、私のコードは、配列自体の数を減らして配列の各文字を吐き出す代わりに、配列の最後の文字から配列の最初の文字までアルファベットを数えているようです。forループだけを使って、入力された文字列をC言語で後方に印刷するには

私のコード、

#include <stdio.h> 
    #include <string.h> 

    int main(void) { 

char word[50]; 
char end; 
char x; 

printf("Enter a word and I'll give it to you backwards: "); 

scanf("%s", word); 

end = strlen(word) - 1; 

for (x = word[end]; x >= word[0]; x--) { 
    printf("%c", x); 
} 

return 0; 
} 

任意の提案ですか?ありがとうございました。

+0

あなたのエラーは、あなたがあなたの配列の要素を取得していないということです、あなたがあなたの最後の文字(例U字)の値を取得し、その後、あなたはそのその文字と印刷の値をデクリメントあなたの逆のアルファベットを説明する(u、t、s、r ...) –

+0

私は興味がありましたので、私は別の質問に投稿しましたhttp://stackoverflow.com/questions/4331486/loops-in-c-challenge-can-それは別の方法/ 4331501#4331501。カウンタに関係しないアレイをループする「異なる」方法があります。 –

+0

ここにいるので、実際のコードで使用する前に、scanfの問題を必ず読んでください:http://stackoverflow.com/questions/2430303/disadvantages-of-scanf –

答えて

6

配列の要素値の間にループがあります。配列のインデックスをループしたいとします。ループを次のように更新してください。

for (x = end; x >= 0; --x) { 
    printf("%c", word[x]); 
} 

最後のインデックスからゼロになり、そのインデックスに文字が出力されることに注意してください。また、プリデクリメントを使ったforループのマイクロ最適化。

+0

マイクロ最適化はここですか?それはforかprintの評価を変えていないのですか? (私は批判していない、私はちょうど前の対前の違いを理解していない場合は増加する) –

+0

ありがとうJason(McCreary)!私はそれが終わり、それを通って働いていないことを愚かに感じる! * face palm * - Jason(Rogers)のコメントで詳しく説明することができますが、この場合はプリデクリメントを使用しても違いは見られません。コードを変更してテストしても差は見られませんでした。ループを余分に余分に実行するだけですか? – Corey

+1

@Jason、これは、前と後のデクリメント演算子のコンパイル方法と関係があります。あらかじめコンパイルしてデクリメントして保存します。書き込み、読み取り、減分、ストアをコンパイルします。余分な* read *ステップに注意してください。繰り返しますが、** micro **最適化。しかし、最初に値を明示的に読む必要はほとんどありませんので、ループで共通に使用できるものです。しかし、 'b = 1 + x - ;'のようなステートメントの必要性があるかもしれません。 –

1

x(文字セットのx番目の文字)ではなく、word[x](配列のx番目の文字)を印刷します。

また、インデックスではなく、文字をカウントダウンする必要があります。

for(x=end, x >= 0; x--) 
    printf("%c", word[x]); 
0

ループでは、xは、wordからなる文字配列へのインデックスです。したがってxendから0に変更し、配列の参照はword[x]である必要があります。

3

特定のインデックスではなく配列の値を呼び出しています。

for(x = end; x >= 0; x--) { printf("%c", word[x]); } 
0
//Change end to int type and modify your for loop as shown. 
#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 

char word[50]; 
int end; 
char x; 

printf("Enter a word and I'll give it to you backwards: "); 

scanf("%s", word); 

end = strlen(word) - 1; 

for (x = end; x >= 0; x--) 
printf("%c",word[x]); 


return 0; 
} 
0
#include <stdio.h> 
#include <stdlib.h> 

/* 
* 
*/ 
int main(int argc, char** argv) { 
    int i; 
    char letters[3]=""; 
    printf("Enter three letters!"); 
    scanf("%s",letters); 
    for(i=3;i>=0;i--){ 
     printf("%c", letters[i]); 
    } 
    return (EXIT_SUCCESS); 
} 
関連する問題