【问题标题】:Find the number with maximum digits in it找到其中包含最多位数的数字
【发布时间】:2016-06-08 18:16:47
【问题描述】:

这是几年前的一道考试题,我正在努力解决它。

我必须构建一个程序,从文本文件中读取一组数字,中间有一个空格,可以是整数或浮点数。然后它使用递归函数打印具有最大位数的数字。

我不知道如何从文件中读取数字。如果我像浮点数一样阅读它们,它们最终会得到相同数量的数字。这是我的代码,直到知道,但我不知道如何继续。 例如:

在文本文件中我们有数字: 1 2 1.5 1.456 2 2.78 7

位数最多的数是 1.456 4 位数。

#include <stdio.h>
#include <stdlib.h>


int main()
{
    int n,i,nr=0;
    float v[100];
    FILE *fp;
    fp = fopen("text.txt","r");
    while(fscanf(fp,"%f",&v[nr])==1){
        nr++;
    }
    fclose(fp);



    return 0;   
}

【问题讨论】:

  • 你应该检查 fp if (fp==NULL){ /* error */ }
  • @Michi 我总是这样做,但现在不是我的问题
  • 你能举一个更好的例子吗?输入输出示例?
  • 然后向我们展示该文件的可能内容以及@Tyler 所说的输入/输出
  • 来自@Tyler 的评论,强调输出(可能还有一些关于你的递归函数如何工作的东西,因为它似乎不适用于所有浮点数)。

标签: c file floating-point numbers


【解决方案1】:

如果你把输入当作一个简单的字符串,你应该可以只是strlen(),不是吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    size_t maxdigits = 0, i;
    char buf[128], winner[128];
    char winner[128];
    FILE* fp = fopen("text.txt", "r");
    if (fp == NULL) {
       printf("missing text.txt\n");
       return -1;
       }
    memset(winner, 0, sizeof(winner));
    while(fscanf(fp, "%s", buf) == 1) {
        i = strlen(buf);
        if (strchr(buf, '.') != NULL)
            i--;
        if (i > maxdigits) {
            maxdigits = i;
            strcpy(winner, buf);
            }
        }
    fclose(fp);
    printf("winner '%s' has %d digits\n", winner, maxdigits);
    return 0;
    }

【讨论】:

  • 它应该忽略小数。
  • int i 应该是size_t i,因为返回类型为strlen,但即使你修复它,你仍然有与 maxdigits 比较的问题,它是一个 int
  • maxdigits 也...跟进%zu 格式说明符。
  • 顺便说一句,当你修复它时......你会以段错误结束
  • 我很欣赏各种调整——但我真的希望将 OP “引导”到成品——而不是自己创建它。上面的版本使用gcc 4.4.7 在他的示例输入集上编译和工作。增强功能应由 OP 决定。
【解决方案2】:

首先你必须使用“拆分”功能。

好像这里有适合你的东西 enter link description here

【讨论】:

    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 2010-11-25
    • 2020-03-25
    • 1970-01-01
    相关资源
    最近更新 更多