在Visual C++中使用C++代码,没有错误,但是代码的某些部分被忽略了。

在Visual C++中使用C++代码,没有错误,但是代码的某些部分被忽略了。,c++,visual-c++,C++,Visual C++,我是编程的绝对初学者,我只是在做一些开始的练习 首先,我使用Visual C++ 2010编译C代码。我只是创建一个新项目并选择一个空的控制台应用程序。之后,我创建一个名为test .c的ReSo源文件,并将文件属性EclitYPE更改为C/C++编译器,并将其编译为C++代码,以便可以使用STD::C.GET命令的包含。现在代码是: #include <stdio.h> #include <iostream> int main() { int number1,

我是编程的绝对初学者,我只是在做一些开始的练习

首先,我使用Visual C++ 2010编译C代码。我只是创建一个新项目并选择一个空的控制台应用程序。之后,我创建一个名为test .c的ReSo源文件,并将文件属性EclitYPE更改为C/C++编译器,并将其编译为C++代码,以便可以使用STD::C.GET命令的包含。现在代码是:

#include <stdio.h>
#include <iostream>

int main() 
{
   int number1, number2;
   int sum;

   puts("Enter number 1 please:");
      scanf_s("%d",&number1);
   puts("Enter number 2 please:");
      scanf_s("%d",&number2);

   std::cin.get();
   std::cin.get();  //(1)

   sum = number1 + number2;
      printf("The average is %f\n", sum/2);

return 0; 
}
现在我的问题是std::cin.get命令被忽略了。输入两个数字后,程序停止,控制台窗口关闭

知道问题出在哪里吗

我还有一个问题

由于我保持控制台打开的问题解决了1,现在printf只给我零作为输出。我想有一个浮点数作为输出,但无论我输入的是number1和number2,我总是得到0.000000

由于我仍在编写我的小程序,以便在输入被接受之前对其进行验证,我还有一个问题

我想使用下面的代码来检查输入

#include <stdio.h>
#include <iostream>
#include <ctype.h>

int main() 
{
   int number1, number2;
   int sum;

   puts("Enter number 1 please:");
      scanf_s("%d",&number1);

   if (isdigit(number1)) 
   {
   puts("Enter number 2 please:");
      scanf_s("%d",&number2);
   }
   else 
   {
   puts("Your input is not correct. Enter a number please.");
   }

   std::cin.get();
   std::cin.get();

   /*



   sum = number1 + number2;
      printf("The average is %f\n", sum/2);  */

return 0; 
}

嗯,它不起作用。我输入一个数字,我的回答是你的输入不是。。。。我已使用搜索并找到以下内容:。不幸的是,这些建议对我没有帮助。

它没有被忽视。当您键入第二个数字,然后按enter键时,它会将您的数字加上一个换行符放入输入流中。scanf删除数字,但保留换行符。当您调用cin.get时,由于流中有一个字符,因此它不会等待您的输入。

但是,关于您的程序,我有一些额外的要点需要说明,这些要点不适合注释:

<>你正在混合C和C++输入。为什么?std::cin>>1号有什么问题? 当您将number1更改为double时,还需要记住更改scanf中的格式字符串,而对于IO流,编译器将为您解决所有问题。对于流和C++字符串、容器和其他数据结构,进行编译要困难得多,但在运行时调用可怕的未定义行为

还请注意,您没有检查输入操作是否成功。如果我调用您的程序,输入非数字而不是数字,会发生什么?切勿使用未经验证的用户、文件或其他外部来源的输入。 对于IO流,输入运算符>>返回对流的引用,您可以将流当作布尔值来使用,因此您可以这样做

if(std::cin >> number1)
  // input succeeded

检查

输入/输出错误后,流在内部进入错误状态。在遇到错误的流上,任何进一步的IO操作都将失败。因此,如果需要,可以延迟输入验证,直到完成所有输入操作:

std::cout << "Enter number 1 please:";
std::cin >> number1;
std::cout << "Enter number 2 please:";
std::cin >> number2;

if(!std::cin) 
  // input error
但是,请记住,在首次使用输入之前,请始终验证输入


注意,我没有检查输出是否有错误。这是因为很难想象控制台的输出会出现问题。你会怎么做?打印错误消息?但是,如果写入文件,请记住也要检查输出。文件操作很容易出错

在回答您修改的问题时,这是因为您使用整数进行除法。将int-sum更改为float-sum,一切都应该正常。

回答您修改过的问题:您使用的是带int的%f printf格式,这不起作用。如果要打印浮点值,需要传递一个double。您可以打印出doublesum/2或偶数sum/2.0,这两种输出都是双倍的。不,对于像printf这样的可变函数,浮点数的作用不一样。事实上,您正在传递可能是四字节类型的内容,并告诉printf将其视为不同格式的八字节类型,因此难怪您没有得到预期的结果


交替地,您可以切换到C++ IoSt流,这会为您解决匹配类型和知道默认促销的问题。您仍然可以从sum/2中得到一个整数,这将减少任何一半,但这将是正确的结果。

非常感谢!我刚刚重复了cin.get这句话,现在它可以工作了。谢谢你的建议。我将尝试在我的小程序中实现输入和输出验证。如果您有更多问题,最好将它们作为单独的问题发布,而不是继续附加到这个问题上。
std::cout << "Enter number 1 please:";
std::cin >> number1;
std::cout << "Enter number 2 please:";
std::cin >> number2;

if(!std::cin) 
  // input error