c - 从文件中读取数据

标签 c file-io

我目前遇到运行时检查失败 #2 - 变量 city 周围的堆栈已损坏。读取的输入文件格式如下:

Betty, 12 Main Street, North Elmo, NC 29801, 2000.20
Joe, 16 Maple Blvd., Stumptown, GA, 33125, 4000.40
Frank, 100 Avent Ferry, Raleigh, NC 27606, -3000.30

How can I fix this error?

int main(int argc, char *argv[]) {
    int c, i, zip;
    FILE *fp;
    char name[20], address[50], city[19], state[3];
    float balance;

    for (i = 1; i < argc; i++) {
        fp = fopen(argv[i], "r");
        if (fp == NULL) {
            fprintf(stderr, "cat: can't open %s\n", argv[i]);
            continue;
        }

        while ((c = getc(fp)) != EOF) {
            fscanf(fp, "%s%s%s%s%d%f", &name, &address, &city, &state, &zip, &balance);
        }

        printf("%s%s%s%s%d%f\n", name, address, city, state, zip, balance);
        fclose(fp);
    }

    return 0;
}

更新:

感谢迄今为止的所有帮助。我现在所做的是创建一个 struct,结构中的每个 person 都包含姓名、地址和余额。我只是将前面的语句更改为将变量传递给 struct person p,然后创建一个 insert() 方法,将 p 插入到 struct person list >.

while (fgets(line, sizeof(line), fp) != NULL) {
        p = malloc(sizeof(struct person));
        sscanf(line, "%19[^,], %49[^,], %18[^,], %2[^ ] %d, %lf\n", p->name, p->address, p->city, p->state, &p->zip, &p->balance);
        printf("got [%s], [%s], [%s], [%s], [%d] and [%9.2f].\n", p->name, p->address, p->city, p->state, p->zip, p->balance);
        insert(p);
    }

我尝试按字母顺序将 person 插入到列表中,并尝试使用 strcmp 执行此操作。使用此方法运行我的程序后,它会在第一次插入时挂起并停止执行。寻求有关我的 insert() 方法哪里出错的帮助。

void insert(struct person *p) {
struct person *cur, *prev;
int result = 0;

for (cur = list, prev = NULL, result = strcmp(p->name, cur->name); cur != NULL && result > 0; prev = cur, cur = cur->next, result = strcmp(p->name, cur->name));

if (cur != NULL && result == 0) {
    printf("-------------------------\n"
        "DUPLICATE RECORD: %s\n"
        "-------------------------\n", p->name);
    free(p);
    return;
}

p->next = cur;
if (prev == NULL) {
    list = p;
}
else {
    prev->next = p;
}
}

我在没有 strcmp() 的情况下测试了这个方法。我刚刚与 p->name > cur->name 进行了比较,它能够使用我的 print() 方法插入并打印出列表。唯一的问题是这些人没有按字母顺序排序,所以我回去尝试实现 strcmp()

最佳答案

这个:

fscanf(fp, "%s%s%s%s%d%f", &name, &address, &city, &state, &zip, &balance);

应该是:

fscanf(fp, "%s%s%s%s%d%f", name, address, city, state, &zip, &balance);

关于c - 从文件中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5811006/

相关文章:

c - C 函数的哈希值

c - 在 ';' token C 代码之前预期为 '{'

c - 如何从 C 字符串中提取数字?

javascript - 如何从 phonegap 的 html5 输入字段文件对象获取路径

c - 使用一组元素初始化数组

c - 为什么 #line 指令没有在 clang 的 false #if 中处理?

c++ - 如何解决调用 WNetAddConnection2 时出现的 ERROR_BAD_NET_NAME 错误?

c - 使用 "fread"获得意外输出

c# - 从 C# 资源中读取文本文件

file-io - 为什么命名管道的只读打开会阻塞?