C++ 使用cin.get()检测用户是否输入空格或输入条件

C++ 使用cin.get()检测用户是否输入空格或输入条件,c++,syntax,C++,Syntax,如果用户输入空格'或输入\n但空格部分似乎不起作用,即使我在!=''中替换,我也会尝试停止此输入循环与在一起!=32这是表示空间的ASCII码 #include<iostream> using namespace std; int main() { int temp, cho = 0; char in = '0'; while (in != '\n' && in != ' ') {

如果用户输入空格
'
或输入
\n
但空格部分似乎不起作用,即使我在!=''中替换
,我也会尝试停止此输入循环
在一起!=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;
        }
}
#包括
使用名称空间std;
int main()
{
内部温度,cho=0;
char in='0';
while(in!='\n'&&in!='')
{
in=cin.get();
温度=in-‘0’;
如果(temp>=0&&temp您实际上有三个问题,这些问题一开始无法相互独立区分,但一旦应用以下推理,这些问题就会变得清晰:


I.布尔条件不正确 这是错误的!您可能是指
&&

(A!=B | | A!=C)
总是正确的(假设
B
C
是不同的,就像在您的示例中一样),因为
A
不可能同时等于两者


二、 程序逻辑顺序错误 此外,您在错误的位置检查此项。您正在这样做:

  • 将输入#0设置为“0”以使我们继续
  • 输入#0是否符合我的退出标准?(否)
  • 接受输入#1
  • 处理输入#1
  • 输入#1是否符合我的退出标准?(否)
  • 获取输入#2(假设这是一个空格)
  • 处理输入#2
  • 输入#2是否符合我的退出标准?(是!)
  • 结束循环
你看到你是如何检查输入的了吗?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();
}
int-temp,cho=0;
//获取第一次迭代的输入
char in=cin.get();
while(in!='\n'&&in!='')
{
温度=in-‘0’;
如果(temp>=0&&temp记住,应该注意的是,您正在读取一个以空格分隔的标记,而内置的格式化I/O运算符已经这样做了。例如,
operator>()
被设计为拉出输入标记(比如一个数字),直到它到达空格(空格字符和换行字符)

一种更干净的方法是使用标准库中的标准算法和类,如
std::istream\u迭代器
std::acculate()

#包括
#包括
#包括
#包括
int main()
{
typedef std::istream迭代器iter\t;
国际热核试验堆(标准::cin);
int-cho(0);
if(it!=iter\u{})
{
自动s=*it;
cho=std::累加(std::开始,std::结束),0,
[](int v,无符号字符c){返回v+c-'0';});
}

std::cout>()
内部和
std::acculate()
将遍历字符,将它们转换为整数,并累加它们的和。

重复的好,在实际读取之前,您正在检查
。@JayMiller不完全是一个重复。@ColonelThirtyTwo您是什么意思?如果(x!=''y!='')
…Related@kuhaku:当某人发布一些代码和输出图像时,很难不认为他们是在编造东西,而这些代码根本不可能生成输出图像。这不是我的错。只是说。读起来非常困难,但是,是的,这一点。当得到充分的评论时。“直到它到达空格,即空格字符和换行符”好吧,你忘记了很多字符!(C++11:27.7.2.2.3/8,22.3.3.1/1,22.4.1.1/2,幸运的是OP的“实现的本机字符集”使用了默认的语言环境,然后事实是。)@kuhaku您也需要
。抱歉,我以为我刚才添加了包含项。:)在谷歌搜索之后,看起来也需要
\include
。@0x499602D2:啊,那么您就不需要
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();
}