當C代碼假定運行scanf line時停止

我寫了一個代碼,考慮到輸入是一個正確的二進制數,它應該計算從用戶那里得到的二進制數中有多少個活動位(1)。

每次在main()中運行scanf()的代碼都會卡住,它并不會停止運行,它只是覺得自己的思想是不確定的,不會給出任何錯誤

這是我寫的代碼,在這種情況下會打印“請輸入二進制數”,然后它就會卡住

#include <stdio.h>


void count_bits(long int UserNum){
    int cnt=0;
    while(UserNum>0)
    {
        if (UserNum%10==1)
        {
            cnt++;  
        }   
    }
    printf("there are %d active bits\n",cnt);
}


int main(){
    long int UserNum=0;

    printf("Please enter a binaric number: ");
    scanf("%ld" , &UserNum);
    count_bits(UserNum);
    
    return 1;
}

如果我先這樣寫scanf(),它甚至不會打印:

scanf("%ld" , &UserNum);
printf("Please enter a binaric number: ");

我做錯什么了?

編輯:示例輸入:1101100

輸出:有4個活動位

input: 0110100111

輸出:有6個活動位

基本上數一數數字里有多少個

? 最佳回答:

假設您希望將用戶輸入的十進制數解釋為二進制數。您的代碼不會檢查您的輸入是否遵循此約定。如果輸入的數字包含0或1以外的數字,則每個非1的數字都將被解釋為0。(UserNum%10==1

由于這個假設,我不討論這樣一個事實,即通常必須用UserNum % 2UserNum & 1來測試位。(如果您想知道如何輸入或打印二進制數而不是十進制數,請另問一個question.)

請注意,如果輸入的數字太多,則很容易出現超限問題。


主要問題:你在函數count_bits中有一個無休止的循環,因為你沒有更新UserNum

你可以這樣改變它:

void count_bits(long int UserNum){
    int cnt=0;
    while(UserNum>0)
    {
        if (UserNum%10==1)
        {
            cnt++;  
        }
        UserNum /= 10;
    }
    printf("there are %d active bits\n",cnt);
}

有了這個變化,代碼就如預期的那樣適合我了。

Please enter a binaric number: 0110100111
there are 6 active bits

數字太大的示例。(我添加了一行printf("You entered %ld\n", UserNum);。)

Please enter a binaric number: 10110111011110111110
You entered 9223372036854775807
there are 0 active bits

如果交換printf中的printfscanf(在count_bits中有無休止的循環),則不會打印消息“Please enter a binaric number:”,因為它不包含換行符,并且默認輸出為line-buffered。顯然scanf導致刷新輸出。

如果將其更改為打印尾隨換行符,如

printf("Please enter a binaric number:\n");

它應該在輸入count_bits(使用無限循環)之前打印出來。

主站蜘蛛池模板: 夜夜精品无码一区二区三区| 成人久久精品一区二区三区| 国产一区二区四区在线观看| 一区二区免费在线观看| 在线|一区二区三区| 国产精品区一区二区三| 亚洲AⅤ无码一区二区三区在线| 国产精品毛片a∨一区二区三区| 中文字幕无码一区二区免费| 少妇人妻精品一区二区三区| 亚洲香蕉久久一区二区三区四区| 无码精品不卡一区二区三区| 东京热无码一区二区三区av| 久久久久人妻一区精品色| 精品国产一区二区三区香蕉事| 综合激情区视频一区视频二区| 伦理一区二区三区| 无码少妇一区二区浪潮免费| 精品人妻少妇一区二区三区| 2021国产精品一区二区在线| 日韩精品人妻av一区二区三区| 中文字幕亚洲一区二区va在线| 99热门精品一区二区三区无码| 精品一区二区三区电影| 无码人妻精品一区二区三区66 | 国产精品一区二区av| 人妻AV一区二区三区精品 | 精彩视频一区二区三区 | 亚洲爆乳精品无码一区二区| 精品一区二区三区免费毛片| 一区二区在线观看视频| 国产精品免费综合一区视频| 无码日韩精品一区二区三区免费| 欧美日韩一区二区成人午夜电影| 亚洲AV成人精品日韩一区18p| 中文字幕一区二区三区在线不卡 | 综合无码一区二区三区| 日本在线视频一区二区| www亚洲精品少妇裸乳一区二区| 亚洲一区电影在线观看| 国产日韩一区二区三免费高清|