2011-02-06 67 views
1

我想要做的是顛倒用戶輸入的一串數字。它會編譯並運行,直到我在scanf之後輸入。那麼我得到一些微軟運行時錯誤...怎麼回事?顛倒用戶輸入的整數字符串(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; 
} 

編輯:爲新行沖洗標準輸入:/也像here只是沒有與該程序。與我的。

+2

你應該粘貼你得到的實際錯誤。我對Windows沒有任何瞭解,但我很驚訝你正在刷新標準輸入。 – DSM 2011-02-06 03:04:49

+0

刷新換行 - >他們跟scanf一樣婊子 – tekknolagi 2011-02-06 03:07:32

+1

就這樣你知道,'unsigned int`的正確格式字符串是`「%u」`,而不是`「%d」`。雖然它不會真正導致錯誤,但您應該修復它。 – 2011-02-06 03:14:19

回答

2

對於你的家庭工作問題,如果你有K&R book,轉到3.5節並仔細閱讀。特別是功能reverse()itoa()。那些應該給你一個關於如何解決你的家庭作業問題的好主意。

4

您試圖訪問未在分配的內存:

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

更改字符* charIt; char char [50];並且一切都應該很好(至少在分段錯誤部分)

另外...傳遞charIt到revStr,因爲charIt包含字符串和我們的數字。 然後,一個簡單的for循環中revStr會做的伎倆(什麼是第二個目的,反正?)

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

這將打印各燒焦我們的字符表示與上一次,直到第一個具有。您應該詳細瞭解for循環;-)

1

您的程序如何脫離for(; n> 0;)循環?在你遇到公交車錯誤之前,是不是隻會增加計數?

ED:

尊敬,我認爲,聲稱「我有邏輯想通了,」是有點樂觀。 :^)毫無疑問,有人會在我寫完這篇文章的時候發佈 的方式,但可能值得引起注意,以致出現問題(除了其他地方提到的內存分配問題):

你的第一個循環「for(; n> 0;)」很奇怪,因爲你將整個數字n打印到計數器的緩衝區中。那麼爲什麼你需要不止一次這樣做呢?如果你選擇的是個人數字,但你不是,顯然你知道該怎麼做,因爲你已經使用過「sprintf(charIt,」%d「,giveStr);」​​。 [另外:giveStr不是一個偉大的名字爲無符號整數變量!]

你的第二個循環也有奇怪的條件:你設置計數器爲0,設置條件,計數器> 0,然後減少計數器內。這顯然不會以你想要的方式循環播放這些角色。假設你認爲第一個循環是逐個字符的,那麼也許你正在考慮從counter-1循環到0?