Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言从文件中读取特定字符_C_File_Scanf - Fatal编程技术网

用C语言从文件中读取特定字符

用C语言从文件中读取特定字符,c,file,scanf,C,File,Scanf,我是C编程新手,我需要编写一些程序,从文件中获取字符。我有这样的文本文件: Grade Joe Black A Mark Freeman B John White C . . . 我只需要从这个文件中读取等级(abc…),然后把它放到数组中。可以只获取这个特定字符而不是整个文件吗 是的。您可能会发现最简单的方法是读取(fgets)中的行,然后解析字符串(从末尾修剪空格,然后在最后一个空格后读取字符) 使用fopen()打开文件 为使用malloc()读取的每一行分配内存 在尚未到达文件末尾时,

我是C编程新手,我需要编写一些程序,从文件中获取字符。我有这样的文本文件:

Grade
Joe Black A
Mark Freeman B
John White C
.
.
.

我只需要从这个文件中读取等级(abc…),然后把它放到数组中。可以只获取这个特定字符而不是整个文件吗

是的。您可能会发现最简单的方法是读取(fgets)中的行,然后解析字符串(从末尾修剪空格,然后在最后一个空格后读取字符)

  • 使用
    fopen()
    打开文件
  • 为使用
    malloc()
    读取的每一行分配内存
  • 在尚未到达文件末尾时,使用
    fgets()
    ,读取文件中的每一行(
    feof()
  • 但是你怎么知道哪个字符是等级呢?如果您查找字符
    'A'
    -
    'F'
    strchr()
    ),您还会在Joe Black和Mark Freeman的姓氏中找到
    'B'
    'F'

    您可能会发现,
    strtok()
    可以帮助您在每个空格中将字符串分成更小的部分,并且假设文件中的数据正常,则每行上的最后一个标记(如果只有1个字符长)将是分数

    (给新会员的提示:如果有人发布了你认为最好的答案,你可以“接受”他们的答案以表示感谢。你的声誉会感谢你。)

    #
    #包括
    内部主(空)
    {
    文件*fp;
    char-arr[100];
    int标志=1;
    fp=fopen(“try.txt”、“r”);
    while(fgets(arr,100,fp)!=NULL)
    {
    如果(标志==1)
    {
    flag=0;
    继续;
    }
    printf(“%c\n”,arr[strlen(arr)-2]);
    }
    }
    

    确保在文件中最后一行的最后一个字符后按enter键,因为我们正在执行
    len-2
    (其中包括
    \n
    字符)。

    如果不查找换行,就无法从文件中读取成绩,因为无法知道成绩在文件中的位置。当然,在数组中只存储您关心的信息是可能的,但是您需要展示您所做的尝试;堆栈溢出不是“为我做家庭作业”服务(可能有人会为你做家庭作业,并在3…2…1…中证明我错了)。你可以阅读文件的每一行,并取最后一个字符。如果您在这方面需要帮助,请尝试编写代码并查看遇到的问题。通过
    fgets()
    读取的字符串中的“最后一个空格”通常是
    '\n'
    ,之后的
    char
    是“''\0`”。不清楚您的建议。谢谢您的建议-答案已更新。谢谢,伙计,我理解这行“printf(“%c\n”,arr[strlen(arr)-2]);”,但是关于这个标志呢?是跳过第一行吗?@Patryk:是的,旗子是用来跳过第一行的。
    #include<stdio.h>
    #include<string.h>
    int main(void)
    {
        FILE *fp;
        char arr[100];
        int flag=1;
        fp=fopen("try.txt","r");
        while (fgets(arr,100, fp)!=NULL)
        {
            if(flag==1)
            {
                flag=0;
                continue;
            }
            printf("%c\n",arr[strlen(arr)-2]);
        }
    }