如何从字符和整数的文本文件中读取整数?

时间:2018-05-15 08:28:16

标签: c integer character

我无法从文本文件中读取和存储最后一组值。例如,假设它打印在文本文件中:

ID等级
AA22 12
BB33 13
DD44 14

我如何只阅读学生的成绩并将其存储在一个整数中才能进行计算?

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

FILE *fp;
int counter;

int main () {
    fp = fopen ("nameoffile.txt", "r");
    int line[50];
    while (fgets(line, 50, fp) != EOF) {
       counter = counter + line;
    }
   printf("The total amount is %d", counter);
}

最初编写,问的问题与给出的例子类似。我真的更关心逻辑。

2 个答案:

答案 0 :(得分:0)

以下是一些可以帮助您入门的代码。您可以使用它作为基础,构建适合您的逻辑。

必须进行许多错误检查,但我留给您了解需要改进的内容。

我建议您先分析它并了解究竟发生了什么,因为您的代码存在许多基本面错误。

int main(void)
{
    FILE *fp;

    fp = fopen("nameoffile.txt", "r");

    char line[200];
    char ids[20][20];
    int grades[20];
    int cnt;

    cnt = 0;

    while (fgets(line, sizeof(line), fp) != NULL)
    {
        if(cnt)
            sscanf(line, "%s %d", ids[cnt - 1], &grades[cnt - 1]);

        cnt++;
    }

    printf("ID GRADE\n");
    for(int i = 0; i < cnt - 1; i++)
    {
        printf("%s %d\n", ids[i], grades[i]);
    }

    return 0;
}

答案 1 :(得分:0)

您似乎知道如何编码,但无法分解项目。打破项目成为逻辑。它有助于细分项目,然后谷歌你不明白的每一点。很明显,您的项目信息超载了。请在下次尝试。

确定要做很多事情,但使用这种方法,从长远来看,您可以节省大量时间。 ✔︎

<强> 击穿

•读取文件

•确定&#34;等级&#34;列。

•只读取&#34;成绩栏&#34;。

下的那些值

•确保值的所有字符均为isdigit()

•将值转换为整数:atoi()然后将这些值添加到数组中,以便稍后用于它们的任何用途。 to carry out calculations如你所说。

研究细分

读取文件

=&GT; C Read Text File ... Now you have access to each line

识别&#34;成绩&#34;柱

=&GT; multiple spaces to only one =&gt; by doing this step, its now easy to identify what your Columns "ID Grade ... ..." are delimited by.

=&GT; Find a substring of a string in C ... Now you know you're currently on the line of your HEADERS ... You'll use this headers to figure out what column your grades are under.

=&GT;通过使用优秀互联网为您提供的strstr()示例,您现在可以随时使用单词&#34;等级&#34;的起始字符的索引编号。

=&GT;幸运的是,您已经将列分隔符设置为单个空格,因此现在循环遍历字符串,直到达到该索引号。

=&GT;但在这样做时,您需要计算遇到的空间量。因为当你的循环达到索引号时,你会得到你的成绩的列号 - &#34;等级&#34;,这实际上只是空格的数量。

确保值的所有字符都是数字

isdigit()

=&GT;循环到您的成绩值所在的列...您可以这样做,因为您知道列号和列分隔符。

=&GT;当你到达字符串中的那个点时,开始检查isdigit()之后的每个字符。通过&#34;之后的每个角色&#34;我的意思是,所有角色直到你到达一个空间。

=&GT;如果你遇到一个其他数字的字符然后抛出一点语法错误或更酷的东西。你的计划!

=&GT;既然你知道成绩值是全部数字,你想要atoi()那个坏男孩。但怎么样? something like this... ... this example code is how to get that value out of the whole string. Now you need to take that value in atoi(value).

=&GT;然后,您将atoi(value)的返回值添加到您的值

祝你好运