当前位置:  开发笔记 > 编程语言 > 正文

cin在C++中尝试将字符串值赋给int变量?

如何解决《cin在C++中尝试将字符串值赋给int变量?》经验,为你挑选了1个好方法。

我正在研究Bjarne Stroustrup的编程 - 使用C++的原理和实践,并得出以下示例:

#include "std_lib_facilities.h"

int main() {
    /* Name and Age input */
    cout << "Please enter your first name and age\n";
    string first_name = "???";
    int age = -1.0;
    cin >> first_name >> age;
    cout << "Hello," << first_name << "(age " << (age * 12) << " months)\n";
    return 0;
 }

如果您运行程序并输入Carlos 22,它将正确输出Hello, Carlos (age 22).但是,如果你投入22卡洛斯,他说输出应该是Hello, 22 (age -1)因为"卡洛斯不是一个整数......它不会被读".但是,当我运行它时,它返回Hello, 22 (age 0),似乎它正在为它分配一个垃圾值.我很好奇为什么会发生这种情况,因为本书暗示除非你输入一个整数,否则它不会尝试为age变量赋值.我使用断点运行代码,并在age输入非整数输入后确认从-1到0 的更改值.

难道我做错了什么?或者这是一个奇怪的事实,因为我正在通过Xcode和它包含的任何编译器构建它?



1> R Sahu..:

如果您跟踪通话中的通话轨迹

cin >> age;

您最终致电std::strtol。的返回值为strtol

如果无法执行转换,则为“ 0”。返回。

cin调用后检查的状态,以确保所有提取均成功。

cin >> first_name >> age;
if ( cin )
{
   // Extraction was successful.
   // Use the data.
}
else
{
   // Extraction was not successful.
   // Deal with the error.
}

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有