簡體   English   中英

在C中掃描和打印可變數據類型“ double”

[英]Scanning and printing variable data type “double” in C

我正在學習算法,很想學習。 我的問題是,我無法在C中使用整數數據類型輸出數字“ 600851475143”。因此我切換為雙精度。 但是,輸出為“ 0.0000”。 有人可以告訴我我在做什么錯嗎? 我只想掃描並打印雙精度數據類型中的任何數字,然后我將重點關注獲取最高質數:)

#include <stdio.h>
#include <math.h>

int main()
{
double number;
double div = 2;
double highest = 2;

printf("Please input a number: ");
scanf("%lf", &number);

printf("\n You entered: %lf", &number);

while(number!=0){
    if(fmod(number,div) != 0){div = div + 1;}
    else{
    number = number / div;
    printf("\n %lf", div);

    if(highest < div){highest = div;}
    if(number == 1){break;}
    }
}
printf("\n The highest number is %lf", highest);

return 0;}

我做了什么:

  1. 在Google中搜索“ C中的double掃描”,了解到“%lf”是正確的方法,但該程序未顯示任何內容。

  2. 我檢查了Stackoverflow中的各種問題,例如:

為什么scanf需要lf來加倍

在C中用scanf讀取雙精度值

浮點數和雙精度數之間的區別

在C中讀取和寫入文件(將其加倍)

讀寫文件的雙精度

浮動vs.雙精度

在C中用scanf讀取雙精度值

  1. 我搜索過的其他網站:

http://www.technoburst.net/2011/07/reading-double-in-c-using-scanf.html

感謝您用我的知識啟發我。

問題出在函數printf("%lf",&number)應該是printf("%lf",number)

使用帶有警告的編譯器進行編譯會顯示此問題:

dbl.c:13:31: warning: format specifies type 'double' but the argument has type
     'double *' [-Wformat]
printf("\n You entered: %lf", &number);
                       ~~~   ^~~~~~~
1 warning generated.

將該行更改為:

printf("\n You entered: %lf", number);

您正在嘗試打印數字的地址而不是數字。

另外,嘗試在末尾添加換行符:

printf("\n The highest number is %lf\n", highest);

由於您正在使用整數,但是,我建議您使用long long ,假設您使用的是C99編譯器:

#include <stdio.h>
#include <math.h>

int main()
{
long long number;
long long div = 2;
long long highest = 2;

printf("Please input a number: ");
scanf("%lld", &number);

printf("\n You entered: %lld", number);

while(number!=0){
    if(number % div != 0){div = div + 1;}
    else{
    number = number / div;
    printf("\n %lld", div);

    if(highest < div){highest = div;}
    if(number == 1){break;}
    }
}
printf("\n The highest number is %lld\n", highest);

return 0;}

您還可以重新格式化代碼以提高可讀性:

#include <stdio.h>
#include <math.h>

int main() {
    long long number, div, highest;
    div = highest = 2;

    printf("Please input a number: ");
    scanf("%lld", &number);

    printf("\n You entered: %lld", number);

    while(number != 0) {
        if (number % div != 0) div += 1;
        else {
            number /= div;
            printf("\n %lld", div);

            if (highest < div) highest = div;
            if (number == 1) break;
        }
    }
    printf("\n The highest number is %lld\n", highest);

    return 0;
}

我也建議換行稍有不同,這使您擁有:

#include <stdio.h>
#include <math.h>

int main() {
    long long number, div, highest;
    div = highest = 2;

    printf("Please input a number: ");
    scanf("%lld", &number);

    printf("\n You entered: %lld\n", number);

    while(number != 0) {
        if (number % div != 0) div += 1;
        else {
            number /= div;
            printf("%lld\n", div);

            if (highest < div) highest = div;
            if (number == 1) break;
        }
    }
    printf("The highest number is %lld\n", highest);

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM