我正在尝试将格式为555-555-5555的电话号码输入到具有三个int的结构中。我尝试使用带有“ - ”分隔符的getline,但我不断收到错误:“无法将参数1从'int'转换为'char *'”。
我尝试创建一个temp char *变量来存储数字,然后键入将其转换为int,但这不起作用。
我该怎么做呢?
由于
编辑:
这里有一些代码:
void User::Input(istream& infile) {
char* phone_temp;
...
infile.getline(phone_temp, sizeof(phoneNum.areaCode), "-");
phoneNum.areaCode = (int)phone_temp;
...
}
答案 0 :(得分:4)
由于您将此作为c ++问题发布,而不是c问题,请使用istringstream
http://www.cplusplus.com/reference/iostream/istringstream/
从我的脑海中,你的代码会变成:
std::string sPhoneNum("555-555-5555");
struct
{
int p1;
int p2;
int p3;
} phone;
char dummy;
std::istringstream iss(sPhoneNum);
iss >> phone.p1; // first part
iss >> dummy; // '-' character
iss >> phone.p2; // second part
iss >> dummy; // '-' character
iss >> phone.p2; // last part
编辑:
既然您已经发布了示例代码,我看到您已经开始使用istream,您可以直接使用>>
运算符,无需创建另一个istringstream运算符。请参阅示例:http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/
另外,如果你不需要,请使用char *和atoi的东西远离c风格的转换方法,使用std::string
和istreams
是“正确的”C ++方式。它避免了内存泄漏和其他令人讨厌的问题。
答案 1 :(得分:2)
从流中读取电话号码:
假设数字格式正确:
void User::Input(istream& infile)
{
int part1;
int part2;
int part3;
char dash1;
char dash2;
infile >> part1 >> dash1 >> part2 >> dash2 >> part3;
/*
* !infile will return false if the file is in a bad state.
* This will happen if it fails to read a number from
* the input stream or the stream ran out of data.
*
* Both these conditions constitute an error as not all the values will
* be set correctly. Also check that the dash[12] hold the dash character.
* Otherwise there may be some other formatting problem.
*/
if ((!infile) || (dash1 != '-') || (dash2 != '-'))
{
throw int(5); // convert this to your own exception object.
}
}
答案 2 :(得分:1)
如果我理解正确,请尝试使用atoi()或stringstream将char *转换为int
答案 3 :(得分:1)
答案 4 :(得分:0)
您无法将char*
投射到int
并期望获得正确的值。 char*
是内存中的地址,因此当您将其转换为int
时,您将获得int
中的内存地址。您需要调用一个函数,例如atoi()
,以便将数据char*
通过算法转换为整数。
答案 5 :(得分:0)
而不是使用infile.getline()
使用带有std::string
的独立版本:
getfile(infile, buffer);
之后,如果您愿意,可以添加getline()
:
istringstream phonenumber(buiffer);
string areacode = getline(phonenumber, part1. '-');
或者您可以使用提取器>> (这就是它的用途!)
int areacode;
phonenumber >> areacode;
请注意:如果您使用的是char*
,请确保为其分配空间,或者至少指向已分配的空间。
答案 6 :(得分:0)
另一个可行的选择,虽然不是C ++,但是:
char a[10],b[10],c[10];
scanf("%d-%d-%d", a, b, c);
答案 7 :(得分:0)
您似乎正在尝试将char转换为整数,在这种情况下,您需要使用atoi函数或字符串流。