【问题标题】:C++ Search TXT File return intC++ 搜索 TXT 文件返回 int
【发布时间】:2014-12-02 20:25:15
【问题描述】:

下面的代码来自我正在处理的一个更大的代码。它在 txt 文件中搜索用户名。如果找到名称,它返回 ether a int 0 或 int 1。它编译并运行,但无论用户是否在 txt 文件中,它总是运行关闭操作,让我认为函数每次都返回 0 .

#include <iostream>
#include <fstream>
#include <string>

int DoThis(int UF);

int main(void)
{
    int z;
    z = DoThis(0);

    if(z == 1){RunThing;}
    else if(z == 0){ShutDown;}

return 0;
}

int DoThis(int UF)
{
int offset;
std::cin >> NameToCheck;
Myfile.open("FilePath")

if(Myfile.is_open())
    {
        while(!Myfile.eof())
        {
            getline(Myfile,line);
            if((offset = line.find(NameToCheck, 0)) != std::string::npos) 
            {
                while(Myfile >> FirstName >> LastName)
                {
                    return = 1;
                }
            }
        }
    Myfile.close();
    }
    else
    {
        std::cout << "File not found.";
    }
return 0;
}

【问题讨论】:

  • @RockOnRockOut:UF 是一个 int 变量。大写字母就是我写它的方式。帮助我浏览我的代码。
  • 您在分配给UserFound 的作业中使用==,意思是=
  • @ooga 看起来他是从一大段代码中复制粘贴过来的,因为那里有很多错误。
  • @luk27R 将变量名大写是不好的做法。

标签: c++ function int text-files


【解决方案1】:

如果没有看到实际代码就无法准确判断,但它看起来总是返回 0,因为您正在为每一行覆盖变量 UserFound 中的内容。当您找到名称时,返回 1 - 这样您就不必遍历文件的其余部分并可能导致其他错误。

将函数的最后一条语句设为return 0;,以防找不到或无法打开文件。

为了逐行读取文件,您不需要第二个while 循环。您只需检查line 字符串是否包含NameToCheck 字符串。如果找到,则返回 1。如果到达文件末尾,则返回 0。

【讨论】:

  • 修复了示例代码以成为我目前所做的更改。输出还是0。是不是我在txt文件中搜索错了?
  • 你为什么要while(Myfile &gt;&gt; FirstName &gt;&gt; LastName)?如果在该行中找到,则返回 1。您在哪里声明了 FirstNameLastName
  • 在代码的另一部分 while(Myfile > FirstName >> LastName) 检查每一行以查看用户之前是否在之前的列表中添加了他们的。
  • 是的,你不应该那样做。您已经在使用 getlinestring::find() 检查每一行
  • 所以你已经在逐行读取文件了,对吧?你做getline(Myfile,line);,这意味着line 现在是一个字符串,它存储你文件中的一行。现在您需要查看line 字符串是否包含NameToCheck 字符串。如果条件(line.find(NameToCheck) != std::string::npos)true,则line 包含名称,因此您可以返回1,因为您找到了它。如果您遍历了每一行并且到达了文件的末尾,则返回 0,这意味着您还没有找到该名称。
猜你喜欢
  • 2016-03-19
  • 2017-04-13
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2020-06-22
  • 2021-11-14
  • 1970-01-01
  • 2016-05-09
相关资源
最近更新 更多