【问题标题】:Compare the number of each line in a file比较文件中每一行的行数
【发布时间】:2023-01-08 02:18:35
【问题描述】:

我开始学习 C,变量、函数、内存和结构都还不错,但现在我只能做一些关于文件的非常简单的练习

例子

我有一个文件,每行都有一个名字和一个等级。就像是

asdfgh 1.5
asdfg h 2
a 0.5

我已经学会了如何读取每一行,我可以编写一个程序来读取每一行并输出行数等,但我现在想学习的是如何隔离数字以便稍后比较它们。例如要获得最大值或平均值,这无关紧要。就像是

The max number is 2

我正在使用 fgets 和 sscanf,但此时我对我已经看过的所有教程感到非常困惑。

任何人都可以分享的任何简单示例或教程?

我正在阅读有关 strtok 的文章,它似乎对我想要的有用,但我不理解将其应用于我想要的理论,我观看的视频让我更加困惑

我可以打开文件,读取文件并读取每一行直到文件末尾但是存储其中有数字的字符以便稍后比较它们是我没有得到的部分

#include <stdio.h>
#include <string.h>

char name[1000];
float number=0;
int lines=0;
char line[1000];


do{
fgets(line,1000,stdin);
lines++
} while (line[0]!='\n');

return 0;

【问题讨论】:

  • 请使用惯用语while(fgets(line, 1000, stdin) != NULL)line[0] 的测试可能永远不会是 '\n'
  • 如果数字总是在最后一个位置并且后面没有任何空格,您可以使用 strrchr() 找到它的开头,然后使用 atof()strtod() 将字符串转换为数字。
  • 您的代码不完整,而且它实际上并未使用 sscanf。拥有您的实际代码并解释您遇到的具体问题会有所帮助。
  • 如果数字真的可以是线上的任何标记,请使用fgets 获取该线。然后,循环 strtok(...," \t\n") 并查看令牌的第一个字符。如果是数字(例如isdigit),则使用strtol对其进行解码。
  • 谢谢大家的帮助,我想在开始练习之前我需要学习更多的理论。我认为看到这个练习的解决方案可能有助于让我更好地理解它,但我认为这里缺少理论,因为显然我写的这段小代码也不正确。我将按照您的建议研究 strrchr() 。谢谢您的回答 :)

标签: c


【解决方案1】:

您可以使用 strcspn 查找第一个数字。

#include <string.h>
#include <stdio.h>

int main(void) {
    char s[] = "hello world 123";
    size_t n = strcspn(s, "1234567890");

    printf("%s
", &s[n]);

    return 0;
}

印刷:

123

如果我们有一个指向这个子字符串的指针,我们就可以使用strtol 来转换它。

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

int main(void) {
    char s[] = "hello world 123";
    size_t n = strcspn(s, "1234567890");

    printf("%ld
", strtol(&s[n], NULL, 10));

    return 0;
}

印刷:

123

【讨论】:

  • 不是strtol,而是strtod
猜你喜欢
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多