[英]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;}
我做了什么:
在Google中搜索“ C中的double掃描”,了解到“%lf”是正確的方法,但該程序未顯示任何內容。
我檢查了Stackoverflow中的各種問題,例如:
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.