gpt4 book ai didi

c++ - 如何修复从 ascii 值到 int 的数组赋值

转载 作者:行者123 更新时间:2023-11-28 04:10:25 25 4
gpt4 key购买 nike

我正在做一个使用指针遍历数组的家庭作业。当我将一个 5 位邮政编码分配给一个数组时,该数组将填充数字的 ascii 值。我很难理解指针的概念以及何时使用它们。

我已经使用 eclipse 上的调试工具确定数组被错误地填充而不是我的输出语句。

这是用于填充数组的方法,其中 r1 是一个类的对象,zipcode 是一个大小为 5 的整数数组(for 循环仅递增到 5用于测试目的):

void getDataFromFile(RentalAgency &r1){
ifstream infile;
string input;
char number;

cout << "Enter the file name: ";

infile.open("Agencies.txt");
infile.get((r1.name),MAX_SIZE,space);
for(int i = 0;i < 5;i++){
infile >> number;
*(r1.zipcode+i) = number;
}
infile.close();
}

这里是结构 RentalAgency 的代码:

struct RentalAgency{
char name[MAX_SIZE];
int zipcode[5];
RentalCar inventory();
};

当给定数字 93619 时,预期输出为 93619,但实际输出为 57 51 54 49 57

最佳答案

看起来一切都是正确的。您正在读取字符并将它们存储为整数。当您将值 57 打印为整数时,数字本身也会被打印出来。当您将 57 打印为 char 时,将打印字符“9”(ASCII 值)。

您可以将 char 转换为 int

*(r1.zipcode+i) = number - '0';

C 和 C++ 保证无论使用何种表示形式,10 位十进制数字的表示形式都是连续的并且按数字顺序排列,即使不使用 ASCII 也是如此。

或者,您可以将邮政编码的数据类型从整数更改为字符:

char zipcode[5];

另外我推荐使用数组样式

r1.zipcode[i] = number;

它的作用相同,但对于读者来说程序员想要做什么更清楚一些。

如果将结构更改为

struct RentalAgency{
std::string name;
char zipcode[5];
RentalCar inventory();
};

你可以将函数简化为

void getDataFromFile(RentalAgency &r1){
std::ifstream infile;
std::string input;

std::cout << "Enter the file name: ";
std::cin >> input;

infile.open(input);
infile >> r1.name;
// or std::getline(infile, r1.name, space);
for (std::size_t i = 0; i < 5; ++i)
infile >> r.zipcode[i];
}
}

您可以调用 infile.close() 但您并不需要它。当函数体离开时,它也会在析构函数中调用。

举个例子

#include <iostream>
#include <sstream>
#include <string>

struct RentalCar {};

struct RentalAgency{
std::string name;
char zipcode[5];
RentalCar inventory();
};

void getDataFromFile(RentalAgency &r1){
// std::ifstream infile;
// std::string input;

// std::cout << "Enter the file name: ";
// std::cin >> input;

// infile.open(input);
std::stringstream infile{"Name 12345 Name2 12346"};
infile >> r1.name;
for (std::size_t i = 0; i < 5; ++i)
infile >> r.zipcode[i];
}
}

int main() {
RentalAgency r;
getDataFromFile(r);
std::cout << r.name << ' ';
for (std::size_t i = 0; i < 5; ++i)
std::cout << r.zipcode[i];
}
std::cout << '\n';
// Output: Name 12345

return 0;
}

关于c++ - 如何修复从 ascii 值到 int 的数组赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57931620/

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