相关疑难解决方法(0)

为什么循环条件中的iostream :: eof被认为是错误的?

我刚刚在这个答案中发现了一条评论说iostream::eof在循环条件下使用"几乎肯定是错误的".我通常使用类似的东西while(cin>>n)- 我猜是隐式检查EOF,为什么检查eof显式使用while (!cin.eof())错误?

它与scanf("...",...)!=EOF在C中使用有何不同(我经常使用没有问题)?

c++ iostream c++-faq

564
推荐指数
5
解决办法
6万
查看次数

我在哪里可以找到当前的C或C++标准文档?

对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.

谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.

要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:

  • C89
  • C99
  • C11
  • C++ 98
  • C++ 03
  • C++ 11
  • C++ 14

c c++ standards c++-faq

394
推荐指数
8
解决办法
12万
查看次数

为什么cin,期望一个int,在输入无效的情况下将相应的int变量更改为零?

我是C++的新手,我正在尝试编写一个非常基本的程序,但我遇到了初始化整数的问题.我把它剥离到一个仍然存在问题的非常小的程序:

#include <iostream>
using namespace std;

int main()
{
    cout << "Please enter your age\n";
    int age = -1;
    cin >> age;
    cout <<"\n\n Your age is " << age << "\n\n";
}
Run Code Online (Sandbox Code Playgroud)

我看了,如果我尝试输入一个字符串,例如abc在age变量,然后输入要失败和值应单独留在家中,因此它应该打印Your age is -1.

但是,当我运行此程序并键入时abc,它会打印出来Your age is 0.为什么?

c++

26
推荐指数
2
解决办法
2225
查看次数

如果输入类型与目标类型不同,"cin"会将变量重置为某个默认值吗?

我有"cin"行为的问题(我不明白).我的IDE是Windows操作系统下的Netbeans(使用Cygwin).

这是一个代码示例:

int main()
{
    int temp = -1;
    std::cin >> temp;    // here user enters string of characters (string) or a single character

    if (temp == 0)
        std::cout << "temp = " << temp << ".\n";
    if (temp == -1)
        std::cout << "temp = " << temp << ".\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我输入某种字符/字符串,此代码显示消息temp = 0.就像转换char为int和转换总是以值0结束.

谢谢你能否解释一下这种行为.

c++ cin

10
推荐指数
1
解决办法
539
查看次数

atof和stringstream产生不同的结果

我一直在研究一个问题,即我将浮点数转换为人类可读格式,然后返回.即一个字符串.我使用stringstream遇到了问题,发现atof会产生"更好"的结果.

请注意,在这种情况下我不打印数据,我使用调试器来检索值:

    const char *val = "73.31";
    std::stringstream ss;
    ss << val << '\0';
    float floatVal = 0.0f;
    ss >> floatVal; //VALUE IS 73.3100052

    floatVal = atof(val); //VALUE IS 73.3099976
Run Code Online (Sandbox Code Playgroud)

对此可能有一个合理的解释.如果有人能够启发我,我会很高兴:).

c++ floating-point precision stringstream atof

5
推荐指数
1
解决办法
635
查看次数

C++ cin读取字符串到int类型返回0

#include <iostream>
using namespace std;
int main()
{
    cout << "Please enter your name and age\n";
    string first_name;
    int age;
    cin >> first_name;
    cin >> age;
    cout << "Hello, " << first_name << " (age " << age << ")!\n";
}
Run Code Online (Sandbox Code Playgroud)

如果我输入Carlos对age或任何其他字符串,我收到了0.这是如何工作的(为什么)?

c++

4
推荐指数
1
解决办法
2405
查看次数

当读取错误的类型时,cin会覆盖我的初始化值?

所以这是一个非常基本的问题和超级微不足道的但我只是通过c ++中的编程原则和实践,我的程序用于读取字符串和int的行为与Bjarne Stroustrup编写的书不同,所以如果他感到惊讶犯了一个错误.无论如何这里是代码:

#include "..\std_lib_facilities.h"

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";
}
Run Code Online (Sandbox Code Playgroud)

当我在提示符输入"22 Carlos"时它输出"Hello,22(0岁)",基本上使我的错误检查的初始化值无用.这是c ++或其他东西的新功能,这就是为什么这本书出错了?

编辑1:BTW我在Windows 7上使用GCC for cygwin,并且-std = …

c++ cin language-lawyer c++11

4
推荐指数
1
解决办法
269
查看次数

为什么这些示例之一是未定义的行为,而另一个不是?

此回复的注释指出,不应使用以下代码,因为它表现出未定义的行为:

int old = (std::cin >> old, old);
Run Code Online (Sandbox Code Playgroud)

类似的代码在这里也受到极大的嘲笑,尤其是对于表现出未定义的行为。

另一方面,这个极受好评的答复建议使用以下代码作为逗号运算符的有用性示例:

while (cin >> str, str != "STOP") {
    //process str
}
Run Code Online (Sandbox Code Playgroud)

我假设如果此代码表现出未定义的行为,则不会被投票。

问题:如果第一个代码是未定义的行为(大概是由于使用了读取结果cin而不检查后者的状态),那么第二个代码为什么没问题?

编辑:第一个示例的评论部分中回答了该问题。第二个示例未显示的是它str的一个实例,std::string因此已初始化。因此,没有未定义的行为。

c++ undefined-behavior

4
推荐指数
1
解决办法
160
查看次数