C编程读取文本文件的特定行

时间:2014-01-29 11:30:10

标签: c file

所以我已经接受了一项练习:让用户输入一个数字,程序将显示与该行相关的文本行,例如

Password 
abcdefg 
Star_wars 
jedi
Weapon 
Planet 
long 
nail 
car 
fast 
cover 
machine 
My_little
Alone
Love
Ghast

输入3:输出:Star_wars

现在我已经获得了一个程序来解决这个问题,但是它使用了函数 getline(),它不能在DEV C ++上进行编译。

#include <stdio.h>

int main(void)
{
int end = 1, bytes = 512, loop = 0, line = 0;
char *str = NULL;
FILE *fd = fopen("Student passwords.txt", "r");
if (fd == NULL) {
    printf("Failed to open file\n");
    return -1;
}
    printf("Enter the line number to read : ");
    scanf("%d", &line);

do {
    getline(&str, &bytes, fd);
    loop++;
    if (loop == line)
        end = 0;
}while(end);

printf("\nLine-%d: %s\n", line, str);
    fclose(fd);
}

我需要的是在不使用getline的简单程序中知道如何做到这一点()

由于

编辑:我也不想下载软件来完成这项工作

3 个答案:

答案 0 :(得分:1)

你写道:

char *str = NULL;

并且您在没有初始化的情况下使用它:

getline(&str, &bytes, fd);

首先你必须初始化它:

char *str=(char*)malloc(SIZEOFSTR);

答案 1 :(得分:1)

使用fgets而不是getline。

#include <stdio.h>

int main(void){
    int end, loop, line;
    char str[512];
    FILE *fd = fopen("data.txt", "r");
    if (fd == NULL) {
        printf("Failed to open file\n");
        return -1;
    }
    printf("Enter the line number to read : ");
    scanf("%d", &line);

    for(end = loop = 0;loop<line;++loop){
        if(0==fgets(str, sizeof(str), fd)){//include '\n'
            end = 1;//can't input (EOF)
            break;
        }
    }
    if(!end)
        printf("\nLine-%d: %s\n", line, str);
    fclose(fd);

    return 0;
}

答案 2 :(得分:0)

您可以在程序中添加此部件而不是do-while循环。您将使用fscanf(),其参数是文件指针,数据类型的说明符和要存储的变量。

printf("Enter the line number to read : ");
scanf("%d", &line);

while(line--) {
    fscanf(fd,"%s",str);
}

printf("\nLine-%d:%s\n",line,str);