用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上工作,可怜的家伙。