在学校我们使用整数-999来停止scanf
并结束用户放入数组的输入。
例如:
while(input != -999) {
scanf("%i", &input)
userArray[i] = input;
i++;
}
我正在考虑要求用户输入字符串并将输入转换为整数(在stdlib中使用atoi
),只要输入不是“停止”。
这是个好主意吗?有更好的方法吗?
答案 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++;
}