c++ - 我在使用 if 函数时遇到了一些问题

标签 c++

在这里,当我输入 CO2 时,它正在处理“else”语句,如果我输入任何其他内容,它仍然是相同的

我尝试将“co2”更改为“co2”,但它甚至不起作用

int main(int nNumberofArgs, char* pszArgs)
{
    char symb[5];

    cout << "Enter Symbol: ";
    cin >> symb[5];

    if (symb[5] == 'co2')
    {
        cout << "This is Carbon-Dioxide" << endl;
    }
    else
    {
        cout << "Error" << endl;
    }

    return 0;
}

最佳答案

你的代码全写错了。

语句 char symb[5]; 声明了一个固定大小的数组,最多可以容纳 5 个 char 元素。但是,当您执行 cin >> symb[5]; 时,您并不是将最多 5 个char 读取到数组中,而是读取单个 char 到数组的6th 槽中,破坏了周围的内存。

此外,symb[5] == 'co2' 不是比较数组内容的正确方法。您正在将 6th(无效)char 与单个多字节字符进行比较,而不是将数组的全部内容与多字符字符串进行比较。

尝试更像这样的东西:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char symb[5];

    cout << "Enter Symbol: ";
    cin.get(symb, 5);

    if (strcmp(symb, "co2") == 0)
    {
        cout << "This is Carbon-Dioxide" << endl;
    }
    else
    {
        cout << "Error" << endl;
    }

    return 0;
}

也就是说,使用 std::string 而不是 char[] 更好:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string symb;

    cout << "Enter Symbol: ";
    cin >> symb;

    if (symb == "co2")
    {
        cout << "This is Carbon-Dioxide" << endl;
    }
    else
    {
        cout << "Error" << endl;
    }

    return 0;
}

关于c++ - 我在使用 if 函数时遇到了一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58329235/

相关文章:

c++ - 大小为 n 的 vector 的 m 个最小值 (c++11)

c++ - 在构造函数和析构函数中打印值

c++ - Qt 定价(最新)

c++ - 将数组的原始指针转换为 unique_ptr

c++ - 关于断开命名管道的 Sybase IQ 问题(在负载表上)

c++ - 为什么 std::is_assignable 不适用于原始类型? (确认)

c++ - 有没有一种简单的方法可以在 MSVC 中包含库文件?

c++ - 在静态分配的数组中访问 VS 通过指向静态分配的数组的指针访问

c++ - 使用双链表的电话簿

c++ - 原子操作需要硬件支持吗?