2010-11-12 72 views
1
... 

char A,M,Q,Q_1,count; 

int main() 

{ 

    system("cls"); 
    count=8; 
    printf("%d",count); 
    printf("\n\tEnter the Multiplicand(M) : "); 
    scanf("%d",&M); 
    printf("\n\tEnter the Multiplier(Q) : "); 
    scanf("%d",&Q); 
     printf("%d",count); //prints 0??????? 
....... 

} 

我不明白怎麼「計數」變爲0全局變量值自動變化?

plz幫助值... 感謝。

系統:WIN7/VS2008

編輯: 其對我所做的一切(感謝PeterTörök)深入瞭解後,我搬到分配到「計數」 scanfs後,這個問題解決了......謝謝。

+0

兩者都是重要的,但我(和,我想,大多數人)喜歡垂直空格(空格,製表符)垂直空白(空行) – pmg 2010-11-12 10:47:04

+0

噢...並儘量遠離全局變量 – pmg 2010-11-12 10:49:42

+0

是的,我不喜歡它們,但我做了一個新手(相對)在C – rsjethani 2010-11-12 14:38:48

回答

5

由於在嘗試用scanf讀取的整數(%d)並將其存儲在一個變量char,有一個存儲器溢出:一個char是1個字節,而一個int(通常)4.結果是,存儲器變量M之後的區域,然後Q被覆蓋。這種情況也會影響count

聲明變量爲int,以避免這種情況(或者明確地scanf閱讀char值 - 但如果你想乘值,最好是馬上用int s到開始,至少減輕整數溢出的風險) 。

+0

很棒....我從來沒想過那麼遠......謝謝。 – rsjethani 2010-11-12 14:47:24

3

不要撒謊編譯器。

你先說M是一個char

char A,M,... 

,然後試圖用它作爲一個int

scanf("%d",&M); 

不要那樣做!

要麼聲明M(和其他變量),如int,或者scanf一個char

+0

該程序在A,M&N上執行位操作,並且提供的值在255 n的範圍內,這些nos的大數組我刪除了其他詳細信息,因此我認爲我可以通過使用char來節省一些運行時內存使用量。 ......顯然我自己創造了一個爛攤子。 – rsjethani 2010-11-12 14:41:30

+0

如果你有大量的值,最好使用'char'(也許'unsigned char'用於位操作)。在C99中,你可以使用'「%hhd」'(''%hhu「'''unsigned char'')掃描一個'char'值 – pmg 2010-11-12 15:04:42