2011-02-06 33 views
1

私がしたいのは、ユーザが入力した数字の文字列を反転することです。 scanfの後に私が入力するまでコンパイルして実行されます。私はいくつかのMicrosoftランタイムエラーを取得...何がうまくいかないのですか?整数の文字列を逆順に入力する(C)

注:これは宿題ですが、私は論理を理解しました。このエラーは私をどんなにうんざりさせますか?

#include <stdio.h>

 
int main() 
{ 
    unsigned int giveStr = 0; 
    char* charIt; 
    printf("Enter a number to be reversed.\t"); 
    scanf("%d", &giveStr); 
    fflush(stdin); 
    sprintf(charIt, "%d", giveStr); 
    revStr(giveStr); 
    getchar(); 
    return 0; 
} 

revStr(unsigned int n) 
{ 
     char buffer[100]; 
     int uselessvar, counter = 0; 
     for (; n > 0;) 
      { 
      uselessvar = sprintf(&buffer[counter], "%d", n); 
      counter++; 
      } 
     for (counter = 0; counter > 0;) 
     { 
      printf("%c", buffer[counter]); 
      counter--; 
     } 
return 0; 
} 

EDIT:フラッシング改行のための標準入力:/ともそのプログラムを持つだけで画像hereません。私と一緒に。

+2

実際のエラーを貼り付ける必要があります。私はWindowsについて何も知らないけど、あなたはスタンダードを流しているのに驚いている。 – DSM

+0

改行のためのフラッシュ - >彼らはscanfの雌犬です – tekknolagi

+1

'unsigned int'の正しいフォーマット文字列は' '%d" 'ではなく' "%u" 'です。実際にはエラーには寄与しませんが、修正する必要があります。 –

答えて

2

家事問題の場合は、K&R bookがある場合は、セクション3.5に目を通して十分にお読みください。特に、機能:reverse()およびitoa()。それらはあなたの宿題を解決する方法についてあなたにかなりよい考えを与えるはずです。

4

あなたがに割り当てられていないメモリアクセスしようとしています

sprintf(charIt, "%d", giveStr); 

変更するchar * charItを。 to char charIt [50];すべてがうまくいくはずです(少なくともセグメンテーションエラーの部分)

また、charItにrevStrを渡します。charItには番号の文字列が含まれています。 その後、revStrのループのためのシンプルなトリックを行います(とにかく、二番目の目的は何だったの?)

void revStr(char *giveStr) 
{ 
    int counter; 
    for (counter = strlen(giveStr)-1; counter >= 0; counter--) 
    { 
    printf("%c", giveStr[counter]); 
    } 
    printf("\n"); 
} 

これは、それぞれが私たちの文字表現が最初の1までの最後の1から持ってchar型印刷します。 forループについてもっと読むべきである;-)

+0

revStrは引数としてcharまたはchar配列を受け取ることになっています - >どのようにINT配列に対してこれを実装しますか? – tekknolagi

+0

主な使用方法sscanfを使用して、指定されたintをchar配列に変換します –

1

どのようにプログラムがfor(; n> 0;)ループから抜け出すのですか?あなたはバスエラーが発生するまで単純に増加しませんか?

ED:

謹んで、私は「私はロジックが考え出し持っている」という主張は少し楽観的だと思います。私がこれを書いてしまった時点で誰かがそれが完了したはずのやり方を投稿するのは間違いないでしょうが、それはおそらく何が間違っていたかに注意を払うだけの価値があります:

あなたの最初のループ "for(; n> 0;)"は、番号n全体をカウンタでバッファに出力しているので奇妙です。だから、なぜこれを何回もやる必要がありますか?個々の数字を選択していたとしても、そうではないかもしれません。すでに "sprintf(charIt、"%d "、giveStr);"を使用しているため、これを行う方法はわかっています。 [脇:giveStrは符号なし整数変数の偉大な名前ではありません!]

2番目のループにも奇妙な条件があります。カウンタを0に設定し、カウンタ> 0の条件を設定し、カウンタを減らします。これは明らかにあなたが望む方法で文字をループすることはありません。最初のループが文字単位であると思ったとしたら、おそらくカウンタ1から0にループダウンすると考えていたでしょうか?

+0

oh god。ありがとう男 – tekknolagi

+0

解決策ですか? – tekknolagi

関連する問題