C-从文件中操作浮点

C-从文件中操作浮点,c,C,我正在为我的一个基于C语言的课程做作业 这是任务的目标: 作业: 从文件中读取浮点数,并在小数点后输出2位数字。数字在小数点前至少应有8位数字。然后,从小数点之前的偶数位置提取所有数字。按相反顺序打印。然后从小数点之前提取奇数位置的所有数字,并按出现顺序打印 例如: 你的电话号码是:12345678.99 按相反顺序打印的偶数定位数字–8 6 4 2 按顺序打印的奇数位数字–1 3 5 7 我的代码(到目前为止)如下: #include <stdio.h> #define INPU

我正在为我的一个基于C语言的课程做作业

这是任务的目标:

作业: 从文件中读取浮点数,并在小数点后输出2位数字。数字在小数点前至少应有8位数字。然后,从小数点之前的偶数位置提取所有数字。按相反顺序打印。然后从小数点之前提取奇数位置的所有数字,并按出现顺序打印

例如:

你的电话号码是:12345678.99

按相反顺序打印的偶数定位数字–8 6 4 2

按顺序打印的奇数位数字–1 3 5 7

我的代码(到目前为止)如下:

#include <stdio.h>

#define INPUT_FILE "FloatNumber.txt"


int main ()
{
    //Variables for the digits BEFORE the decimal point
    int ldig1 = 0, ldig2 = 0, ldig3 = 0, ldig4 = 0, ldig5 = 0, ldig6 = 0, ldig7 = 0, ldig8 = 0;
    //Variable for the float number in the text file
    float txtFloat;

    FILE *fp = NULL;
    fp = fopen(INPUT_FILE, "r"); //because we are just reading from a file... the float is already written there
    fscanf(fp, "%.2f", &txtFloat);


    //Print the number that is currently in the text file
    printf("Your number is: %.2f\n", txtFloat);

    //Extract first 8 digits (before decimal)
    ldig8 = (int)txtFloat % 10;
    txtFloat /= 10;

    //Extract last 7 digits (before decimal)
    ldig7 = (int)txtFloat % 10;
    txtFloat /= 10;

    //Extract last 6 digits (before decimal)
    ldig6 = (int)txtFloat % 10;
    txtFloat /= 10;

    //Extract last 5 digits (before decimal)
    ldig5 = (int)txtFloat % 10;
    txtFloat /= 10;

    //Extract last 4 digits (before decimal)
    ldig4 = (int)txtFloat % 10;
    txtFloat /= 10;

    //Extract last 3 digits (before decimal)
    ldig3 = (int)txtFloat % 10;
    txtFloat /= 10;

    //Extract last 2 digits (before decimal)
    ldig2 = (int)txtFloat % 10;
    txtFloat /= 10;

    //Extract last digits (before decimal)
    ldig1 = (int)txtFloat % 10;
    txtFloat /= 10;

    //Print the digits in even positions in REVERSE order
    printf("Even positioned digits printed in reverse order: %d %d %d %d\n", ldig8, ldig6, ldig4, ldig2);

    //Print the digits in odd positions in REGULAR order
    printf("Odd positioned digits printed in order: %d %d %d %d\n", ldig7, ldig5, ldig3, ldig1);

    //Close the file
    fclose(fp);
}
输出应与上述示例类似,但我得到的是以下输出:

你的电话号码是:0.00

按相反顺序打印的偶数位数字:0

按顺序打印的奇数位数字:0

我相当肯定我的问题与打字有关。如您所见,我已将
txtFloat
键入为int,因为这是执行模运算的唯一方法。但我认为这可能就是为什么我的输出都是零的原因

此外,我正在Windows上使用WinSCP、PuTTY和Notepad++运行此程序。我还没有机会在实际的Linux操作系统上运行它。我在某个地方读到,Windows和Linux之间的文本文件配置不同,所以这可能是另一个问题?我确信我的代码中还有其他问题,而且我对编程也比较陌生。关于我做错了什么,或者我可以改变什么来纠正这个问题,有什么想法吗?提前谢谢


(这也是我在该网站上的第一篇帖子,对于我可能犯下的任何格式错误,我深表歉意)。

“%.2f”
格式字符串传递到
fscanf
是无效的。只需将其替换为
“%f”
。还要确保文件采用单字节编码。

将数字作为字符串读取并修复字符串会更容易。但是你们的老师可能觉得不太有趣。哈哈,我不认为这能让我走得更远。对于此特定赋值,禁止使用数组和/或字符串。调用fopen()函数时,请始终检查(!=NULL)返回值,以确保此语句的操作成功:
fscanf(fp,.2f,&txtFloat)建议读取整个浮点数,即
fscanf(fp、%f、&txtFloat)调用fscanf()函数时,始终检查返回值(而不是参数值),以确保操作成功。即
如果(1!=fscanf(fp,%.2f,&txtFloat)){//handle error and exit}
变量textFloat是一个浮点,因此除以一个浮点,即
txtFloat/=10.0f谢谢你!将
“%.2f”
更改为简单的
“%f”
解决了我在输出中的零问题。但是现在,当我使用小数点后除了“00”以外的任何数字时,输出是不正确的。例如,“12345678.99”输出:您的号码是:12345679.00按相反顺序打印的偶数位数字:9 6 4 2按顺序打印的奇数位数字:7 5 3 1
12345678.99