fgetc()用于处理输入的字符 - char by char。 该函数返回输入字符的整数值。
我需要检查一下:
我已经定义了31-int-array和一个用于计算字符的整数。当用户输入“ - ”时,我需要将字符作为字符串保存到另一个数组(实际上是映射)。
printf("Enter route (city - city):\n");
char town[31];
int character, charsOnRow = 0, i = 0;
map<int, string> route;
while (!feof(stdin)) {
character = fgetc(stdin);
if (character != '-' && character != '\n') {
if (charsOnRow < 30) {
town[charsOnRow] = character;
charsOnRow++;
} else {
printf("Invalid input.\n");
}
} else if (route.size() == 0 && character == '\n') {
printf("Invalid input.\n");
} else {
town[charsOnRow] = '\0';
route[i] = town;
charsOnRow = 0;
}
}
所以输入的例子是:
Syracuse - Utica
Binghamton - Syracuse
Binghamton - Utica
我该如何修复它并能够将int-array保存到map<int, string>
?
答案 0 :(得分:2)
您有技术错误(无效的C ++)和逻辑错误。
主要原因是执行char-by-char输入的复杂性。
您可能会发现使用C ++级别的i / o更容易:声明一个std::string
变量来保存输入的完整行,使用std::getline
读取它。 / p>
干杯&amp; hth。,
答案 1 :(得分:0)
您需要将town
声明为字符数组。目前你将它作为一个字符指针数组。
更改
char * town[31];
到
char town[31];
答案 2 :(得分:0)
实际上fgetc返回一个int来指示错误条件,如果值是&lt; 0,你有一个错误,否则,你可以简单地将它添加到一个字符串,如:
std::string str;
for(;;)
{
int ch = fgetc(fp);
if(ch < 0)
throw error();
str += ch;
}
填写字符串时,只需将其添加到地图中: map [yourIntValue] = str;
另外,关于你的代码:char * town [31];
这是一个指针数组,对你的情况来说是正确的: char镇[31];
要将其添加到地图中,您可以简单地使用: map [yourIntValue] = std :: string(town);