C++ 关于cin输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 关于cin输入相关的知识,希望对你有一定的参考价值。

#include<iostream>
int main()

using namespace std;
int a;
cin>>a;
cout<<a<<endl;
return 0;


这段程序 如果我输入
a
程序会输出什么?

//注意着两张图片,第二张 我把cin一行注释起来了,

由于类型不同,int a并没有储存你输入的a的adcll码,

参考技术A 我来详细地给楼主解释一下这个程序的执行过程吧
cin读的是输入缓冲区(stdin)中的内容,只有缓冲区为空的时候才会要求用户输入,否则只是读取缓冲区的内容。
在第一次运行cin>>s的时候,
缓冲区为空,所以会显示下划线让你输入,线程挂起,然后你输入sdf sdf ssf sdf f EOF 回车
这时候,cin>>s返回,第一个sdf读进s,然后便输出sdf和换行
下一次执行cin>>s的时候,缓冲区不为空,所以不再要求用户输入,读取第二个sdf,然后输出sdf换行,依次类推
直到cin读到eof的时候,cin>>s返回false,循环退出,程序结束
参考技术B 会输出一个不确定的值,该值是系统为变量a分配的地址上原有的数据值(会随时间发生改变)。 参考技术C 应该是ASCII的a,97吧

关于 getline(cin, string) 的 C++ 快速问题

【中文标题】关于 getline(cin, string) 的 C++ 快速问题【英文标题】:C++ quick issue on getline(cin, string) 【发布时间】:2012-03-30 03:40:44 【问题描述】:

自从我编写 C++ 代码以来已经有一段时间了,我忘记了在收集字符串输入时发生的一件烦人的事情。基本上,如果这循环回来,比如说如果你使用负数,那么它会在第二轮跳过员工姓名行中的 cin。我记得之前遇到过这个问题,并且必须在输入字符串之前或之后清除或执行此类操作。请帮忙!

PS 另外,任何人都可以帮助我在下面的正确循环中获得额外帮助。如何检查字符串输入中的值以确保它们输入了值?

#include <string>
#include <iostream>
#include "employee.h"

using namespace std;

int main()

    string name;
    int number;
    int hiredate;

    do

        cout << "Please enter employee name: ";
        getline(cin, name);
        cout << "Please enter employee number: ";
        cin >> number;
        cout << "Please enter hire date: ";
        cin >> hiredate;

    while( number <= 0 && hiredate <= 0 && name != "");

    cout << name << "\n";
    cout << number << "\n";
    cout << hiredate << "\n";

    system("pause");
    return 0;

【问题讨论】:

您只想在名称为"" 时停止循环?我想你想要name == ""?我想你也想使用 or (||) 而不是 and (&amp;&amp;) 【参考方案1】:

您想将循环条件更改为是否未设置以下任何一项。只有当所有 三个 都未设置时,逻辑 AND 才会触发。

do 
    ...
 while( number <= 0 || hiredate <= 0 || name == "");

接下来,按照@vidit 的规定使用cin.ignore() 来解决读取换行符的问题。

最后,也是重要的一点,如果您输入一个字母字符作为整数而不是...整数,您的程序将运行一个无限循环。为了缓解这种情况,请使用 &lt;cctype&gt; 库中的 isdigit(ch)

 cout << "Please enter employee number: ";
 cin >> number;
 if(!isdigit(number)) 
    break; // Or handle this issue another way.  This gets out of the loop entirely.
 
 cin.ignore();

【讨论】:

【参考方案2】:

cin 在流中留下一个换行符 (\n),这会导致下一个 cin 使用它。有很多方法可以解决这个问题。这是一种方式.. 使用ignore()

cout << "Please enter employee name: ";
getline(cin, name);
cout << "Please enter employee number: ";
cin >> number;
cin.ignore();           //Ignores a newline character
cout << "Please enter hire date: ";
cin >> hiredate;
cin.ignore()            //Ignores a newline character 

【讨论】:

很好,但是如果你输入一个字符而不是一个整数作为数字,它并不能解决问题,如果你没有输入一个名字,它也不能解决循环。

以上是关于C++ 关于cin输入的主要内容,如果未能解决你的问题,请参考以下文章

关于 getline(cin, string) 的 C++ 快速问题

关于ios::sync_with_stdio(false);和 cin.tie加速c++输入输出流

❥关于C++之cin>>cin.getlinecin.get提取字符串差异

关于输入的一点小技巧

关于c++中cin的一个小问题。请大家帮我解答一下

关于ios::sync_with_stdio(false)的一些问题