如何向数组添加输入并在用户输入字符串'stop'时停止?

时间:2015-09-19 02:48:06

标签: c string input while-loop

在学校我们使用整数-999来停止scanf并结束用户放入数组的输入。

例如:

while(input != -999) {
  scanf("%i", &input)
  userArray[i] = input;
  i++;
}

我正在考虑要求用户输入字符串并将输入转换为整数(在stdlib中使用atoi),只要输入不是“停止”。

这是个好主意吗?有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

以字符串形式读取并将其转换为int实际上更可取,因为它避免了与scanf

的特性相关的潜在缺陷

而是使用fgets,它读取一行输入。此函数将换行符添加到输入字符串中,因此请务必在执行任何其他操作之前将其删除。完成后,您可以使用strcmp查看字符串是否等于“停止”,如果没有,则调用atoi,或者更好strtol(哪个更好)错误检查)获取数值。

答案 1 :(得分:0)

在我看来,当你读取未知数量的输入时停止循环的最佳方法(也就是Stanly B. Lippman所说的C ++ Prime)你应该尝试使用“无效输入” “或文件结束解决方案(如果你想使用一些C ++)。

你可以使用这个sintax:

while(std::cin >> input) {
  userArray[i] = input;
  i++;
}
  • 结束文件:

如果您使用的是Windows系统,我们输入control-z(按住Ctrl键并按z)输入文件结尾。在UNIX系统上,包括在OS X机器上,文件结尾通常是control-d

  • 输入无效:

因此,无论何时键入浮点数或任何其他类型的输入都不是int,循环将结束。

PS:这适用于C ++,所以我真的不知道它是否能在C中正常工作。

答案 2 :(得分:0)

如果输入是"停止":

,如何停止循环

您将使用string.h库。

do{
  scanf("%s", input)
  userArray[i] = input;
  i++;
} while(strcmp(input, "stop") != 0);

strcmp将数组input与字符串" stop"进行比较,只要输入不是"停止"它将继续继续运行。

按照dbush的建议,使用fgets,它会好得多。

答案 3 :(得分:0)

我喜欢使用的另一种解决方案: -

while(true)
{
scanf("%s", input);
if(!strcmp(input, "stop"))
    break;
userarray[i]= input;
i++;
}