为什么我在while while循环中获得额外的角色?

时间:2017-01-02 19:01:21

标签: c++ do-while

在我的下面的代码中,我试图在文件中写一个字符,直到用户键入' $'。当我编译它时,它应该打印

Enter $ to exit.
: l
: k
: $

但相反它打印

Enter $ to exit.
: l
: : k
: : $

这是我的代码:

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
  char ch;
  ofstream out("Test2.txt");
  if(!out)
  {
    cout<<"Hello!! Sorry."<<endl;
  }
  cout<<"Enter $ to exit."<<endl;
  do
  {
    cout<<": ";
    cin.get(ch);
    out.put(ch);
  } while(ch!='$');
  out.close();
  return 0;
}

4 个答案:

答案 0 :(得分:2)

您的代码缺少一个get函数,并在编译时遇到一个get函数。您可以通过在do块的末尾添加一个cin来避免它。

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
  char ch;
  ofstream out("Test2.txt");
  if(!out)
  {
    cout<<"Hello!! Sorry."<<endl;
  }
  cout<<"Enter $ to exit."<<endl;
  do
  {
    cout<<": ";
    ch=0;
    cin>>ch;
    out.put(ch);
  } while(ch!='$');
  out.close();
  return 0;
}

或者使用purposes运算符:

Protect

答案 1 :(得分:1)

程序运行后运行od(八进制转储Linux实用程序)。你会看到它长5个字符,从而解释了为什么打印了5个冒号。

$ od -t x1 -t a Test2.txt
0000000  6c  0a  6b  0a  24
          l  nl   k  nl   $
0000005

答案 2 :(得分:0)

尝试c因为这个问题更好

答案 3 :(得分:-2)

由于某种原因,你的while循环运行第二次..如果不尝试使用do while循环和if语句,只需要!= ch然后执行