【问题标题】:Casting chars from input to string将字符从输入转换为字符串
【发布时间】:2011-01-17 17:07:12
【问题描述】:

fgetc() 用于处理输入的字符 - 逐个字符。 函数返回输入字符的整数值。

我需要检查这些:

  • 每个城镇不得超过 30 个字符
  • 每行都有一个“-”(破折号)字符(将整行分成两个城市)

我定义了 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&lt;int, string&gt;

【问题讨论】:

  • 您已经声明了一个 char 指针数组。我不认为那是你想要的

标签: c++ string int validation


【解决方案1】:

您有技术错误(无效的 C++)和逻辑错误。

其中一个主要原因是逐字符输入的复杂性。

您可能会发现使用 C++ 级别 i/o 更容易:声明一个 std::string 变量来保存完整的输入,使用 std::getline 读取它。

干杯,

【讨论】:

    【解决方案2】:

    您需要将town 声明为字符数组。目前你将它作为一个字符指针数组。

    改变

    char * town[31];
    

    char town[31];
    

    【讨论】:

      【解决方案3】:

      其实fgetc返回一个int表示错误情况,如果值

      std::string str;
      for(;;)
      {
        int ch = fgetc(fp);
        if(ch < 0)
          throw error();
      
        str += ch;
      }
      

      填满字符串后,只需将其添加到地图中: 地图[yourIntValue] = str;

      另外,在您的代码上:char * town[31];

      这是一个指针数组,您的情况正确的是: 炭镇[31];

      并将其添加到地图中,您可以简单地使用: 地图[yourIntValue] = std::string(town);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-28
        • 2019-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-08
        相关资源
        最近更新 更多