【问题标题】:converting char to int in while loop在while循环中将char转换为int
【发布时间】:2015-08-04 06:16:44
【问题描述】:

我正在用 C++ 开发一个计算器程序。但问题是当我尝试将字符转换为整数时,它会显示运行时错误。代码如下。

#include<iostream.h>
#include<conio.h>

void main()
{
   clrscr();
   int num,sum=0;
   cout<<"Enter the number"<<endl;
   cin>>num;
   while(num!='=')
   {
      sum=sum+num;
      cin>>num;
   }
   cout<<"The sum is"<<endl;
   getch();
}

程序运行良好,即它可以正确输入,但是当我过去按“=”符号时,它只显示黑屏。请帮我。谢谢。

【问题讨论】:

  • 这还能编译吗?您使用的是&lt;iostream.h&gt; 而不是&lt;iostream&gt;。您正在使用 cincoutendl,但未使用 std 命名空间。
  • 它将在 turbo c++ 上编译。
  • 您似乎正在学习 1980 年代的 C++。这对就业市场没有任何帮助。
  • 那我应该学哪个C++...?

标签: c++


【解决方案1】:

在你输入 '=' 之后,这个字符将被转换为 int,因为你将 num 声明为 int。但不幸的是,结果并不像你预期的那样。转换失败!当从流中读取时发生错误时,会设置错误标志,并且在清除错误标志之前无法进行更多读取。这就是为什么你会遇到问题

请参考cin for an int inputing a char causes Loop that is supposed to check input to go wild

【讨论】:

    【解决方案2】:

    你的问题在于这个循环

    while(num!='=')
       {
          sum=sum+num;
          cin>>num;
       }
    

    我会告诉你为什么你的代码挂起,为什么不要求更多的输入,即使 while 循环中的条件失败。当您将 char 而不是 int 插入某个内容时,会发生这种情况,当您输入 '=' 时,流会损坏。

    你需要使用这样的东西来避免挂起。

        {
            sum = sum + num;
            cin >> num;
            cin.clear();
            cin.ignore();
        }
    

    当您的代码需要一个 int 时,不要插入 char,它会设置错误标志,并且无法再读取。而且由于您不能输入 char 来代替 int,因此请在开始时询问用户他想添加多少个数字,然后多次运行循环以获得输入。

    像这样:

    cout<<"Enter the number of items"<<endl;
    cin>>items;
    cout<<"Enter first item" <<endl;
    while(items)
    {
    cin>>num;
    sum=sum+num;
    items--;
    }
    

    【讨论】:

    • Thanx for ur rply.. 但我也尝试使用 0x3D 而不是 '=' 但它显示了同样的问题。是吗?
    • 我已经提到过,一旦您尝试在 int 类型的变量中插入 char 而不是 int,就会引发错误标志并且 cin 停止接受更多输入,所以此时您输入“=” ,您的 num 变量没有分配任何新值,而是仅存储旧值。
    • 那么您 R.Sahu 先生说要使用命名空间 std ..?并且小姐 ridimha 还说它将在 turbo C++ 中运行。 ?
    • R.Sahu 是对的,因为 是 C++ 的标准头文件,而不是 检查此stackoverflow.com/questions/2976477/…
    • 和 cout 和 cin 是定义在 std 命名空间中的全局对象,而 endl 是也在 std 命名空间中定义的(流操纵器)函数。所以你需要在你的代码中使用“std”命名空间。包含头文件后,您需要在文件中写入“使用命名空间std”...参考此stackoverflow.com/questions/15346944/…
    猜你喜欢
    • 2012-01-24
    • 2015-02-16
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2014-12-11
    • 2018-02-22
    相关资源
    最近更新 更多