【问题标题】:argc, argv implementation c++argc, argv 实现 c++
【发布时间】:2017-12-27 04:11:48
【问题描述】:

我的程序主要部分有问题。我正在尝试使用 argc 来实现 main 中的参数,argv 将作为输入 txt 文件接收。此外,当我尝试读取文件时,我收到一个错误,例如:变量 i 被使用而没有被初始化,我必须单击中止。

代码的主要部分是这个:

    void main(int argc, char* argv[])
{
    cout <<"<---------------FAZA 2--------------->" <<endl;
    cout << " Numar de argumente ale functiei main:" << argc << endl;
    for (int i = 0; i < argc; i++) 
    {
        if (argv[i] = "Angajat.txt")
        {
            Fisiere_Intrare f1;
            f1.Fisiere_Angajati();
            break;
        }
        else
            cout << " O.K." << endl;
    }

Fisiere Intrare 是这样写的一个类:

 class Fisiere_Intrare
{
public:
    void Fisiere_Angajati()
    {
        ifstream fis;
        fis.open("Angajat.txt", ifstream::in);
        if (fis.is_open())
        {
            while (!fis.eof())
            {
                Angajat a;
                fis >> a;
                cout << a;
            }
        }
        fis.close();
    }
};

“Angajat”也是一个具有以下属性的类:name、salary、work_age。

【问题讨论】:

  • C++ 不能靠猜测来学习。请查看此C++ books 列表和cppreference.com 参考。
  • if (argv[i] = "Angajat.txt") 不是你的意思。 = 是赋值。 == 是比较。
  • argv[i] = "Angajat.txt" 在多个方面都是错误的。即使您使用了正确的运算符==,它也是错误的,因为您不会比较字符串。相反,您将比较指针。
  • 顺便说一句,main 函数返回一个int。总是。

标签: c++ class argv argc


【解决方案1】:

你的代码有几个问题:

if (argv[i] = "Angajat.txt")

正如 KeithSmith 指出的那样,“=”是赋值运算符,为了进行比较,需要“==”运算符。 此外,C-Strings 在 C/C++ 中不能那么容易地进行比较。当您使用 c++ 标记您的问题时,您可以将您的参数转换为 std::string 对象并将其与您的文件名进行比较:

if (std::string(argv[i]) == "Angajat.txt")

但是,您提到的错误消息表明某处可能隐藏了另一个问题。

【讨论】:

  • 在不需要三向比较的情况下,为什么要使用 string::compare? C++ 字符串是常规类型,可以像任何其他常规类型一样进行比较:std::string(argv[i]) == "Angajat.txt" 甚至 argv[i] == "Angajat.txt"s (..."sv 如果你有现代 C++)
  • strcmp 函数可以使用并且可能更简单:(strcmp(argv[i], "Angajat.txt") == 0)
  • @Cubbi:你是对的。我忘记了重载的比较运算符。我相应地更新了答案。
  • @ThomasMatthews:使用 strcmp 也是有效的,但由于问题被标记为 C++,我决定使用 std::string。我在这方面对文本进行了一些更新。
【解决方案2】:

argv[] 为 const char* 且 i 不确定,编译器无法判断。

【讨论】:

  • i 是循环计数器。我不知道你想说什么。
猜你喜欢
  • 2011-04-15
  • 2017-08-10
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多