Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.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 - Fatal编程技术网

用c语言逐行阅读?

用c语言逐行阅读?,c,C,我要读取具有以下格式的文本文件: 3 COD Halo Madden 2 Tom Jones 1 3 2 Bill Ray 3 2 1 ........ 我想通过创建一个投票系统,找出n人中最热门的电子游戏选择是什么。 第一个整数是游戏数。然后有三行是视频游戏的名字。然后是一个整数,表示人数,然后是他们的名字,然后是他们对游戏的偏好排名 我需要帮助开始这个项目。有什么建议吗?请参见下面的示例,它应该可以帮助您开始,它将读取输入文件中的每一行,您可以对每一行执行任何需要的操作: #include

我要读取具有以下格式的文本文件:

3
COD
Halo
Madden
2
Tom Jones 1 3 2
Bill Ray 3 2 1
........
我想通过创建一个投票系统,找出n人中最热门的电子游戏选择是什么。 第一个整数是游戏数。然后有三行是视频游戏的名字。然后是一个整数,表示人数,然后是他们的名字,然后是他们对游戏的偏好排名


我需要帮助开始这个项目。有什么建议吗?

请参见下面的示例,它应该可以帮助您开始,它将读取输入文件中的每一行,您可以对每一行执行任何需要的操作:

#include <err.h>    
#include <stdio.h>

int
main()
{
    FILE *f;
    size_t len;
    char *line;

    f = fopen("inputfile.txt", "r");
    if (f == NULL)
        return 0;

    while (line = fgetln(f, &len)) {
                /*DO whatever you need to do for each line here.*/
        fwrite(line, len, 1, stdout);
    }
    if (!feof(f))
        err(1, "fgetln");

    return 0;
}
#包括
#包括
int
main()
{
文件*f;
尺寸透镜;
字符*行;
f=fopen(“inputfile.txt”,“r”);
如果(f==NULL)
返回0;
while(line=fgetln(f,&len)){
/*为这里的每一行做你需要做的一切*/
写入(行、列、1、标准输出);
}
如果(!feof(f))
错误(1,“fgetln”);
返回0;
}
像这样的示例

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

typedef struct player {
    char *name;
    int  *rank;
} Player;

int main(){
    FILE *fp;
    if(NULL==(fp=fopen("data.txt", "r"))){
        perror("file open");
        return -1;
    }
    //read name of game
    int numOfGame;
    fscanf(fp, "%d", &numOfGame);
    char gameName[numOfGame][64];
    int i;
    for(i=0;i<numOfGame;++i){
        fscanf(fp, "%63s", gameName[i]);
    }
    //read gamer 
    int numOfGamer;
    fscanf(fp, "%d%*c", &numOfGamer);
    Player players[numOfGamer];
    char line_buf[128];
    int j;
    for(i=0;i<numOfGamer;++i){
        fgets(line_buf, sizeof(line_buf), fp);
        char *p = strchr(line_buf, ' ');
        p = strchr(p+1, ' ');//second space
        *p = '\0';
        players[i].name = strdup(line_buf);
        players[i].rank = calloc(numOfGamer, sizeof(int));
        for(j = 0;j<numOfGame;++j){
            sscanf(++p, "%d", &players[i].rank[j]);
            p = strchr(p + 1, ' ');
        }
    }
    fclose(fp);
    //test print
    printf("name\t\t");
    for(i=0;i<numOfGame;++i){
        printf("%s\t", gameName[i]);
    }
    printf("\n");
    for(i=0;i<numOfGamer;++i){
        printf("%s\t", players[i].name);
        for(j = 0;j<numOfGame;++j){
            printf("%d\t", players[i].rank[j]);
        }
        printf("\n");
    }

    //release
    for(i=0;i<numOfGamer;++i){
        free(players[i].name);
        free(players[i].rank);
    }
    return 0;
}
#包括
#包括
#包括
typedef结构播放器{
字符*名称;
整数*秩;
}玩家;
int main(){
文件*fp;
if(NULL==(fp=fopen(“data.txt”,“r”)){
perror(“文件打开”);
返回-1;
}
//阅读游戏名称
智力游戏;
fscanf(fp、%d、&numOfGame);
char gameName[numfogame][64];
int i;

对于(i=0;iSame author)-这可以说是另一个的超集。另一个只询问如何阅读“Tom Jones”行;这问了一个稍微更一般的问题。
标题是什么?它不是标准C。什么是
fgetln()
?它也不是标准C?看起来好像
fgetln()
返回一个指针-这是每行的一个新指针吗?如果是,则表示内存泄漏。如果不是,则如果需要在多个调用之间保留值(行的内容),则可能需要将该行复制到某个位置(最好不要在线程程序中使用它,调用的函数最好不要使用它,以及…).fgetln()和err()在BSD系统中可用,在mac中也是如此。hmmm…是一个Linux手册页,它指出,
err.h
是一个非标准的BSD扩展。是一个BSD函数…正如您所指出的那样…您需要小心识别非标准功能,因为OP很可能在Windows上工作,可怜的家伙。