【发布时间】:2017-05-21 08:02:11
【问题描述】:
好吧,因为我最近开始阅读有关 C++ 的内容,并尝试阅读我正在阅读的《编程原理和练习使用 C++ 第二版》这本书。
我是一个完全的新手,所以这可能就是原因,但就是这样。
好吧,所以在书中他们让你实现了一个头 .h 文件而不是 (iostream) 等。所以它只是一开始就包含所有这些,因为这本书不希望我们在一开始就专注于那些库的学习。 所以我实现了它并使用了它(不确定这是否与问题有关)。无论如何,在第 77 页,我被卡住了。
基本上这是一个错误的值,它应该只显示 -1(或 0),因为 int 得到一个错误值,等等 Carlos(字母,不是整数)所以 int 没有得到正确的值因此根据本书,应该可以工作的代码(并显示 0 或 -1,因为它是输入的错误值)是这样的:
#include "std_lib_facilities.h"
using namespace std;
int main()
{
cout << "Please enter your first name and age\n";
string first_name = "???"; // string variable // ("???” means “don’t know the name”)
int age = –1; // integer variable (–1 means “don’t know the age”)
cin >> first_name >> age; // read a string followed by an integer
cout << "Hello, " << first_name << " (age " << age << ")\n";
}
这就是我写的:
#include "std_lib_facilities.h"
using namespace std;
int main()
{
cout << "Please enter your first name and age" << endl;
string First_Name = "???";
int Age = -1;
cin >> First_Name >> Age;
cout << "Hello, " << First_Name << "(age" << Age << ")" << endl;
keep_window_open();
return 0;
}
但是,当我写 22 Carlos 时,Visual C++ 的结果是崩溃。 根据这本书它应该输出 Hello, 22 (age -1)
但对我来说,它只是在我输入 Carlos 作为年龄值后崩溃... 当我运行和编译它时,我没有收到错误或任何东西,但是当我为年龄提供错误值后它崩溃了。
我做错了什么? 补充:我知道我可以使用一个字符串来让它工作,但是我只是对它为什么不起作用感兴趣,因为我正在关注这本书我希望在没有这些问题的情况下遵循它工作。
这是我做的时候的 gif: http://imgur.com/a/ERjhz 解决方案:使用 system("pause");而不是 keep_window_open(); 然而,在知道书中的代码并不总是有效的情况下阅读这本书仍然很烦人:(
【问题讨论】:
-
您使用的是什么版本的 Visual Studio,它在 MSVC2015 中按预期工作。
-
您可以尝试包含
#include <iostream>和#include <string>来代替您添加的包含吗?只是看看它是否可以这样工作。 -
这本书明显过时了。按照目前的标准,正确的输出是0,而不是-1。但是程序不应该崩溃。你确定程序可以编译吗?它包含在 C++ 程序中不合法的非标准减号。当使用 MS Word 或其他文字处理器进入程序时,它们会出现 ifteb。不要那样做。使用程序员的文本编辑器。
-
我正在使用 Visual Studio 社区 2017 版来编写我的代码。顺便说一下,我尝试包含 iostream 和字符串,但它也不起作用(是的,我删除了 keep_window_open();因为它引用了我之前使用的那个)
-
抱歉,第一个样本包含无效字符,第二个没有。
标签: c++ c++11 visual-c++ c++17