gpt4 book ai didi

c - 函数迭代从文本文件接收到的相同输入

转载 作者:太空宇宙 更新时间:2023-11-04 04:10:50 25 4
gpt4 key购买 nike

此函数应从名为 "newtext.txt" 的文件(由我的代码中的路径定义)中读取单行输入,提取所述行中的第一个单词并将其用作名称字段对于链表的每个元素(然后打印)。

这是我写的代码:

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

struct user {

char name[50];
struct user* next;
};

int main() {

unsigned i = 0;
struct user *temp = NULL
struct user *aux = NULL;


FILE* file_pointer = fopen("/home/marco/Desktop/suite1/newtext.txt", "r");

if(file_pointer == NULL) {

printf("\nWarning! File not opened properly!\n");

return -1;
}

char vector[100];
char sub_v[50];

while(fgets(vector, sizeof(vector), file_pointer) != NULL) {

while(vector[i] != ' ' && i < (sizeof(sub_v) - 1)) {

sub_v[i] = vector[i];
i++;
}

sub_v[i] = '\0';
i++;

if(temp == NULL) { //first element in the list;

temp = malloc(sizeof(struct user));
aux = temp;
strcpy(temp -> name, sub_v);
temp -> next = NULL;

} else {

temp -> next = malloc(sizeof(struct user));
temp = temp -> next;
temp -> next = NULL;
strcpy(temp -> name, sub_v);
}
}

while(aux != NULL) {

puts(aux -> name);
aux = aux -> next;
}

fclose(file_pointer);

return 0;
}

包含的文件是:

andrew michael jonathan
frank
marcus raquis
freddie

预期的输出应该是:

andrew
frank
marcus
freddie

但它是:

andrew
andrew
andrew
andrew

似乎 while 循环重复使用相同的输入行,但我不知道如何解决这个问题。

最佳答案

变量 i 没有在 while 循环中重新初始化

while(fgets(vector, sizeof(vector), file_pointer) != NULL) {

因此内部循环

    while(vector[i] != ' ' && i < (sizeof(sub_v) - 1)) {

sub_v[i] = vector[i];
i++;
}

有未定义的行为。

在外层循环中声明变量 i。例如

while(fgets(vector, sizeof(vector), file_pointer) != NULL) {

unsigned i = 0;
while(vector[i] != ' ' && i < (sizeof(sub_v) - 1)) {

sub_v[i] = vector[i];
i++;
}

还有这个声明

    i++;

是多余的,没有意义。

以及这个循环中的条件

while(vector[i] != ' ' && i < (sizeof(sub_v) - 1)) {

最好代替

#include <ctype.h>

// ...

while( !isspace( ( unsigned char )vector[i] ) && i < (sizeof(sub_v) - 1)) {

关于c - 函数迭代从文本文件接收到的相同输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com