【问题标题】:Scanning and printing variable data type "double" in C在 C 中扫描和打印可变数据类型“double”
【发布时间】:2015-04-20 02:28:18
【问题描述】:

我正在研究算法并且很想学习。我的问题是,我无法使用 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 中搜索“scan double in c”,得知“%lf”是正确的方法,但程序没有显示任何内容。

  2. 我检查了 Stackoverflow 中的各种问题,例如:

Why does scanf need lf for doubles

Reading in double values with scanf in c

Difference between float and double

Read and Write within a file in C (double it)

Reading and writing double precision from/to files

float vs. double precision

Reading in double values with scanf in c

  1. 我搜索过的其他网站:

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

感谢您用您的知识启发我。

【问题讨论】:

  • 使用long 数据类型而不是int,而不是double,因为只要您只需要整数运算,它就是浮点数。作为格式说明符,使用%ld
  • printf("\n You entered: %lf", &amp;number); --> printf("\n You entered: %f", number); 删除 l&amp;
  • 先检查scanf的返回值...

标签: c printf double scanf


【解决方案1】:

问题出在函数printf("%lf",&amp;number)应该是printf("%lf",number)

【讨论】:

  • 你的意思是去掉&符号? “&”。删除后输出仍然显示“0.00000” -> 构建 -> 运行。
  • 尝试不使用 &,并保存项目。我在没有ampersend的情况下尝试了这段代码,它正在工作。保存您的项目
【解决方案2】:

使用带有警告的编译器进行编译会显示问题:

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;
}

【讨论】:

  • 也许是number % div 而不是fmod(number,div)
  • @kagushajeiel 没问题。另外,请尝试进行 chux 在对此答案的评论中提到的更改。
猜你喜欢
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
相关资源
最近更新 更多