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

关于缓冲 关于^z的小小疑问

iangzy 发布于 2013-05-27 12:11, 699 次点击
程序代码:
#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main()
{
    string currWord,preWord;
    cout<<"Enter somewords:(Ctral+Z to end)"<<endl;
    while(cin>>currWord)
    {
#ifndef NDEBUG
        cout<<currWord<<endl;
#endif
        if(!isupper(currWord[0]))
            continue;
        if(currWord==preWord)
            break;
        else
            preWord=currWord;
    }
    if(currWord==preWord&&!currWord.empty())
        cout<<"The is no repeated wor that has initial capital."<<endl;
    else
        cout<<"There is no repeated word that has initial capital."<<endl;

    return 0;
}


为何这段程序输入MM MM^Z时会出现跟所设计的结果不一样?
且程序第一次读入MM后不会立即读入MM^Z而是等到下次输入NN ^Z时再一起读入上次的MM^Z,
也就是说输入NN^Z加回车后程序读入的是MM^ZNN,
6 回复
#2
lzj125302013-05-27 13:31
你这个程序是全的吗?
#3
iangzy2013-05-27 13:36
回复 2楼 lzj12530
书本复制的,,目测是全的
#4
lzj125302013-05-27 13:46
^Z 控制符前面
只有本站会员才能查看附件,请 登录
如果有字符那么不会作为结束控制符.只有输入回车或者单独输入^Z才能结束输入流。所以你直接输入MM^Z是不会结束输入的。要结束只有键入回车或者单独输入^Z
#5
iangzy2013-05-27 13:51
回复 4楼 lzj12530
第一次读入MM后不会立即读入MM^Z而是等到下次输入NN ^Z时再一起读入上次的MM^Z,
也就是说输入NN^Z加回车后程序读入的是MM^ZNN,

????
#6
lzj125302013-05-27 14:17
恩,就是这意思
#7
pangding2013-05-28 12:57
以下是引用iangzy在2013-5-27 13:51:45的发言:

第一次读入MM后不会立即读入MM^Z而是等到下次输入NN ^Z时再一起读入上次的MM^Z,
也就是说输入NN^Z加回车后程序读入的是MM^ZNN,
 
????

一般来说,是回车之后系统才会一次性把输入的内容送去程序处理。

在终端里 ctrl-z 往往需要在行首才会有控制意义,不然很可能会被程序作为一般字符处理。
1