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