1

美好的一天,我的代码遇到了一些问题。我上周刚开始处理文件,目前我正忙于将字符串添加到程序中。我想从文件中添加主程序中的名称,但我已经尝试了几乎所有东西。任何帮助将不胜感激。另外,这是我第一次使用 Stack Overflow,如果我错过了发布任何信息,非常抱歉。

图片包括 Input.txt 文件以及当前输出。我添加了控制台输出来测试问题,它似乎与字符有关。我尝试过使用 String 本身,但这仍然是失败的。此外,我不允许使用 C++ 文件处理方式(如果有意义的话)。[虽然我被允许使用 C++] - 为即将到来的考试做这整个程序的练习。

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

using namespace std;

int ReadFile(char*,int*,double*);

int main()
{
    char names[128];
    int ages[128];
    double salaries[128];

    int size = ReadFile(names, ages, salaries);

    for(int i = 0; i < size; i++)
    {
        printf("My name is %s, and I am %d years old. My salary is $%.2lf\n", *(names+i), *(ages+i), *(salaries+i));
    }

    return 0;
}

int ReadFile(char *namesArr, int *ageArr, double *salaryArr)
{
    FILE *IN = fopen("Input.txt", "r");
    int i = 0;
    if(IN == NULL)
    {
        cout << "Error! Can't open file.";
        exit(1);
    }
    else
    {
        char name[20];
        int age = 0;
        double salary = 0.00;
        while(fscanf(IN, " %c,%d,%lf", &name, &age, &salary) != EOF)
        {
            *(namesArr + i) = *name;
            *(ageArr + i) = age;
            *(salaryArr + i) = salary;
            cout << *(namesArr+i) << " ";
            i++;
        }
    }
    fclose(IN);
    return i;
}

输入.txt:

Kazu,21,2250.00
Anonymous,34,3500.25
John,31,2750.00
Paul,25,3125.25
Jin,19,1750.00

4

1 回答 1

0

节省时间,启用所有编译器警告

My name is %s-->My name is %c


如果您想阅读名称,而不仅仅是第一个字母,还需要进行更多更改,例如:

    char name[20];
    int age = 0;
    double salary = 0.00;
    while(fscanf(IN, " %19[A-Za-z'] ,%d ,%lf", &name, &age, &salary) == 3)
    {
        *(namesArr + i) = *name; // This only copies the first `char`
        strcpy(TBD, name); // Need something like this.
                           // TBD is a pointer to an `char` array
        *(ageArr + i) = age;
        *(salaryArr + i) = salary;
        cout << TBD << " ";
        i++;
    }
于 2021-10-28T13:34:20.597 回答