iostream-C++输入输出流和循环的问题

问题描述

C++输入输出流和循环的问题
 #include<iostream>
using namespace std;
int main()
{
    int n=1;
    while(n){
        cout<<"输入继续"<<endl;
        cin>>n;
    }
    return 0;
}

我如果输入1,按回车,则循环正常进行,我若是输入1 1,按回车,则循环了两次,因为
cout<<"输入继续"<<endl;两次,而且跳过了第二次的cin,
好奇怪,我想知道为什么及原理
我输入的是1,空格,1,回车

解决方案

必定输入了非法字符。例如 a,x,或者CTRL+Z,CTRL+D了
只要你永远输入非 0 整数(C,C++ int 范围内的),这个程序 永远不会结束,不管输入多少个数
空白符(空格,换行,tab)会被忽略
他们只是作为 每次 cin 的结果的边界而已。换行是用户输入的边界,没有换行的时候,用户可以一直输入
每次输入换行,完成一次缓冲区输入。
在完成所有数据从缓冲区实际输入之前,会一直使用缓冲内部的数据
此时如果有输出,就会开始输出一批数据,
输出结束后,才可以进行下一次用户输入(一个新行)

其他空白符 是 任何整型,浮点型 的输入边界(从缓冲区输入的边界)。
这些类型的数据,只能取得 空白符之前的数据,空白符后面是下一个数据。

解决方案二:

因为cin代表往缓冲区输入数据,并不是每次使用cin语句,都意味着电脑要从键盘提取一次输入。按照您的代码,比如您第一次cin时输入5次,分别是【2】、【5】、【空格】、【7】和【9】,那么缓冲区里的指针会首先指向【2】这个字符,然后使用cin时,会从【2】这个字符开始往后扫描,先扫描【2】,发现它和n的类型相匹配,ok,继续往后扫描,遇到【5】字符,还是匹配,再往后,惨了,遇到拦路天王之一——空格符!(其它天王是换行符、制表符等等),那怎么办呢?只能是扫描终止,将前面扫描到的2和5转换成数值赋值给n,然后跳过这个空格符,将缓冲区的指针指向空格符下一个位置,也就是【7】!注意,理解这个是关键,因为下次在使用cin时,还是从缓冲区指针所指向的位置开始扫描,也就是说,按照您的代码,下次使用cin时,会得到【79】这个数值赋值给n

解决方案三:

C++输入输出流
C++输入输出流
C++输入输出流

解决方案四:

空格也是输入结束符 看如下文章:
一. cin>>

该操作符是根据后面变量的类型读取数据。

输入结束条件 :遇到Enter、Space、Tab键。

对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)

#2:

复制代码
#include
using namespace std;
int main()
{
char str1[10], str2[10];
cin>>str1;
cin>>str2;
cout<<str1<<endl;
cout<<str2<<endl;
return 0;
}

复制代码

测试:

abcd efgh

输出:

abcd

efgh
---网上搜的 你看看吧

解决方案五:

楼主输入的是:1空格1回车,当然是执行两次了。空格也是cin的结束符。

解决方案六:

不会吧,楼主,输入11,循环也不会结束啊,
代码看不出问题,
你再测试一下看看。

解决方案七:

楼主你应该是输错了什么东西

解决方案八:

空格与换行一样。都被认为输入结束了一次。

解决方案九:

空格与换行一样。都被认为输入结束了一次。

解决方案十:

如果运行两次,说明空格代码结束符

时间: 2024-11-01 16:31:12

iostream-C++输入输出流和循环的问题的相关文章

C++风格的文件输入输出流

输出主要由重载的左移操作符(<<)来完成,输入主要由重载的右移 操作符(>>)完成. >>a表示将数据放入a对象中. <<a表示将a对象中存储的数据拿出. 接下来我们继续看一 下C++风格的串流控制,C++引入了ostringstream.istringstream. stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件. istringstream类用于执行C++风格的串流的输入操作. stringstream类同时可以支

字符串-关于C++输入输出流的一个小问题。。

问题描述 关于C++输入输出流的一个小问题.. 如果我要用cin.get()去一个一个读入字符,那我如何把这些字符怎么储存在一个字符串里呢?? 解决方案 int a[99];for(i=0i<98i++){ a[i]=cin.get();} 解决方案二: char a[100];int i=-1;do{ i++; a[i]=cin.get();}while(a[i]!='n')//接收到回车则停止输入 解决方案三: 都一样用循环的原理啊,只不过存储在字符串里 解决方案四: char a[100]

Java中IO流,输入输出流概述与总结

总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类: 而所有输出流都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类. [首先需要明白的是:流是干什么的???(为了永久性的保存数据)   根据数据流向的不同分为输入流和输出流:   根据处理数据类型的不同分为字符流和字

c++ 输入输出流-c++文件流相关问题,编译通过,但是结果为什么却报错?

问题描述 c++文件流相关问题,编译通过,但是结果为什么却报错? 源码如下,这是书上的一个习题: #pragma warning(disable: 4786)#include<map>#include<set>#include<iostream>#include<fstream>#include<string>using namespace std;void initialize_exclusion_set(set<string>&a

清除标志-输入输出流标志位无法清除

问题描述 输入输出流标志位无法清除 在看C++ PRIMER时的输入输出流一节中,看到流状态的标志位设置及清除时. 在调试流状态时,有一点未明白,下边是调试代码. #include #include #include using namespace std; int main() { int itemp = 0; while(cin >> itemp, !cin.eof()) { if(cin.bad()) throw runtime_error("IO stream corrupt

详解Java中ByteArray字节数组的输入输出流的用法_java

ByteArrayInputStream 介绍ByteArrayInputStream 是字节数组输入流.它继承于InputStream. 它包含一个内部缓冲区,该缓冲区包含从流中读取的字节:通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的. 我们都知道,InputStream通过read()向外提供接口,供它们来读取字节数据:而ByteArrayInputStream 的内部额外的定义了一个计数器,它被用来跟踪 read() 方法

C++中输入输出流及文件流操作总结_C 语言

本文实例为大家分享了C++中输入输出流及文件流操作笔记,供大家参考,具体内容如下 1.流的控制     iomanip          在使用格式化I/O时应包含此头文件.     stdiostream   用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序 2.类继承关系 ios是抽象基类,由它派生出istream类和ostream类, iostream类支持输入输出操作,iostream类是从istream类和ostream类通过多重继承而派生的类 类ifstrea

PHP输入输出流学习笔记

  这篇文章主要介绍了PHP输入输出流学习笔记,PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流.标准输入输出和错误描述符,内存中.磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器,需要的朋友可以参考下 PHP输入和输出流是通过php://来访问的,它允许访问 PHP 的输入输出流.标准输入输出和错误描述符, 内存中.磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器. php://stdin, php://stdout 和 php://std

运用异步输入输出流编写Socket进程通信

同步?异步输入输出机制的引入 在Merlin之前,编写Socket程序是比 较繁琐的工作.因为输入输出都必须同步.这样,对于多客户端客户/服务器模式, 不得不使用多线程.即为每个连接的客户都分配一个线程来处理输入输出.由此而 带来的问题是可想而知的.程序员不得不为了避免死锁,线程安全等问题,进行大 量的编码和测试.很多人都在抱怨为什么不在Java中引入异步输入输出机制.比较 官方的解释是,任何一种应用程序接口的引入,都必须兼容任何操作平台.因为 Java是跨平台的.而当时支持异步输入输出机制的操