我试图让这个输入回路停止,如果用户进入space ' '
或enter \n
但空间部分似乎不工作,甚至当我更换in != ' '
与in != 32
这空间的ASCII码.
#include<iostream>
using namespace std;
int main()
{
int temp, cho = 0;
char in = '0';
while (in != '\n' && in != ' ')
{
in = cin.get();
temp = in - '0';
if (temp >= 0 && temp <= 9)
cho += temp;
}
}
Run Code Online (Sandbox Code Playgroud)
是否有可能实现cin.get()
和控制台应用程序?
你实际上有三个问题,一开始就无法独立区分,但是一旦你应用下面的推理,它就会变得清晰:
while (in != '\n' || in != ' ')
Run Code Online (Sandbox Code Playgroud)
这是错的!你可能意味着&&
.
(A != B || A != C)
永远是真的(假设B
和C
不同,就像你的例子中那样)因为A
不可能同时将它们都相等.
此外,你在错误的地方检查这个.你这样做:
你看到你如何检查输入#2太晚了?它已经被"处理"了.在实现上述修复后,您将退出循环,但您已经将角色附加到cho
.
这个怎么样:
int temp, cho = 0;
// Get input for the first iteration
char in = cin.get();
while (in != '\n' && in != ' ')
{
temp = in - '0';
if(temp >=0 && temp <=9)//so only the ASCII of digits would be entered
cho += temp;
// Now get input for the next iteration
in = cin.get();
}
Run Code Online (Sandbox Code Playgroud)
重复不是很好,但是一旦逻辑正确,你可以随心所欲地调整它.
最后,即使使用此代码,您可能会因终端中的行缓冲而遇到问题:您的程序将正常运行,但由于您的字符通常默认情况下不会发送到程序直到提供整行,因此没有"生活"/"瞬间"对压迫空间的行为的反应.只有当你点击输入时,你的终端最终提交给你的程序的所有那些字符,此时积压空间触发循环退出; 这使得它看起来像你的程序只是在换行条件下终止,但事实并非如此.如果您从程序中生成了一些输出,以查看退出前实际处理的字符数,您可能已经发现了这一点.
您可以通过关闭终端仿真器中的行缓冲来解决此问题,或者通过删除使用空格来终止循环的功能来解决此问题,而只需依赖换行符 - 后者就是惯例,因为您不必要求用户配置他们的终端专门用于运行你的程序:它已经在所有通常情况下都能正常运行.
重要的是不要假设,如果为问题1应用解决方案A不会立即使您的程序完美运行,那么解决方案A必定是错误的.您应该考虑到您还有未知问题2和3的可能性.
保持开放的心态并收集证据非常重要,例如从程序中编写输出以跟踪其执行情况......或使用调试器逐步完成并分析它正在做什么.据我所知,除了粗略的经验观察之外,你还没有真正收集到关于你的程序如何执行的任何证据.
归档时间: |
|
查看次数: |
1901 次 |
最近记录: |