编程原则和实践(第2版)由Bjarne stroustrup - 第3.3章,代码不起作用

时间:2015-10-17 22:04:42

标签: c++

所以我刚开始阅读这本书,并从pdf文件中粘贴了这段代码:

group_index = 
  mtcars %>%
  group_by(cyl) %>%
  group_indices

mtcars %>%
  mutate(group_index = group_index) %>%
  group_by(cyl) %>%
  slice(group_index %>% first %>% seq)

这本书说应该输出

// read name and age (2nd version)
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";
}

如果我输入

Hello, 22 (age –1)

但我收到此错误

22 Carlos

程序没有编译。

我意识到在下面的行中,“减1”实际上并不是“减”“ - ”符号。 ..“ - ”“ - ”它大于减号,见?

D:\C++\Part I The Basics\Programs\3.Read name and age (2nd).cpp|9|error: stray '\226' in program|

所以我用减号更改了这个标志并键入了22个Carlos,它输出Hello 22,0而不是Hello 22,-1。

我的问题是:

当我只是从pdf中复制粘贴时,为什么程序不能正常工作?

为什么即使我用 - “ - ”符号改变 - 符号后它也无法工作?

1 个答案:

答案 0 :(得分:0)

pdf中的字符看起来与-符号不同,导致编译器无法识别符号。该程序完全符合它的设计目标。正如Ken White所说,你正在为一个int分配一个字符串,这导致你的输入流失败而你永远不会检查。你可以这样做:

cin >> first_name >> age;
if(cin.fail())
    age = -1;
//Do Stuff

cin.fail()将检查是否从输入流中为变量分配了正确的值。