注册 登录
编程论坛 C++教室

请教一个输入命令是否可以连续输入的问题

terry64no 发布于 2010-10-11 08:01, 881 次点击
大家好,上一次很感谢各位前辈解答关于绘制*号图形的问题
语句如下
#include<iostream>

using std::cout;
using std::cin;
using std::endl;

int main()
{
    int a ;
    int x;
    int y;   
   
    cout << "Enter 5 nums(1-30):";
      
    for (  x = 1; x <= 5; x++ )   
    {
        cin >> a;           //不是应该每次读入一个数,然后再开始第二个for语句循环吗?为什么我连续输入5个数字,程序都可以连续读入?         
         for ( y = 1; y <= a; y++ )
        {
            cout <<'*';
            
        }
        
        cout << endl;
        
    }   
    system("pause");
    return 0;
}
现在有一个问题,是关于第一个for循环语句里面cin命令的,按照上面的嵌套语句,按原理来说,不是应该每次只能读入一个数,然后再开始第二个for语句循环吗?为什么我连续输入5个数字,程序都可以连续读入?

[ 本帖最后由 terry64no 于 2010-10-11 08:02 编辑 ]
6 回复
#2
mxs8102010-10-11 09:56
把你的操作截屏发过来看看,没太看明白你说的意思,连续输入五个数字不也是一个数吗?
#3
tornador2010-10-11 10:58
编译器是这样做的:你输入了五个数,并不是将这五个数一次性一下地全部输入,而是按照你的程序,遇到输入语句时,读取一个。你可以这样理解,程序在运行时,你已经把要输入的值全部告诉给了编译器,编译器要做的,就是遇到要输入时,从你刚才输入的读取一个就是了。这样也可以也为节省时间。当然,如果你想一个输入后回车一下也可以。
希望对你有所帮助。
#4
terry64no2010-10-11 13:25
以下是引用tornador在2010-10-11 10:58:34的发言:

编译器是这样做的:你输入了五个数,并不是将这五个数一次性一下地全部输入,而是按照你的程序,遇到输入语句时,读取一个。你可以这样理解,程序在运行时,你已经把要输入的值全部告诉给了编译器,编译器要做的,就是遇到要输入时,从你刚才输入的读取一个就是了。这样也可以也为节省时间。当然,如果你想一个输入后回车一下也可以。
希望对你有所帮助。
噢,明白了!有了这个功能的确会大大减少程序员的时间!
#5
terry64no2010-10-11 13:25
以下是引用mxs810在2010-10-11 09:56:34的发言:

把你的操作截屏发过来看看,没太看明白你说的意思,连续输入五个数字不也是一个数吗?
谢谢!我问的3L已经帮我解答了!
#6
2010-10-11 21:36
以下是引用terry64no在2010-10-11 13:25:14的发言:

噢,明白了!有了这个功能的确会大大减少程序员的时间!


他说的就是 有个输入缓冲区    因为CPU 内存 磁盘  这三样设备的速度是不一样的    属于串联结构   所以以最慢的表示最大速度

所以硬盘的速度是制约速度的关键   所以这里就有缓冲区的说法了   把要用的东西 弄一部分到内存里   想用的时候就直接跟内存要  

这样可以避免多次跟磁盘打交道

C语言的缓冲区结构是FILE类型    全局变量 _iob[0]是输入的  楼主可以自己跟着玩玩   挺有意思的
#7
terry64no2010-10-12 08:56
以下是引用cacker在2010-10-11 21:36:32的发言:



他说的就是 有个输入缓冲区    因为CPU 内存 磁盘  这三样设备的速度是不一样的    属于串联结构   所以以最慢的表示最大速度

所以硬盘的速度是制约速度的关键   所以这里就有缓冲区的说法了   把要用的东西 弄一部分到内存里   想用的时候就直接跟内存要  

这样可以避免多次跟磁盘打交道

C语言的缓冲区结构是FILE类型    全局变量 _iob[0]是输入的  楼主可以自己跟着玩玩   挺有意思的
噢,原来还有这层原理,了解了!
1