隐藏英雄 发表于 2022-12-25 22:15

C++ 求解3

本帖最后由 隐藏英雄 于 2022-12-26 11:06 编辑


#include <fstream>
#include <iostream>
#include <sstream>

using namespace std;

char FindSize();
char TestDiver();
char str;

ifstream MyFile("D:\\ping.t");

int main()
{
      if (FindSize() == 1)
      {
                cout << "没有找到TTL" << endl;
      }

      if (TestDiver() == 1)
      {
                cout << "没有找到默认网关" << endl;
      }
}

char FindSize()
{
      system("ping 192.168.1.1 > D:\\ping.t");
      string TextReadSize;
      char StrPing = 'TTL';

      while (getline(MyFile, TextReadSize))
      {
                if (TextReadSize.find(StrPing) != string::npos)
                {
                        return 0;
                }
      }
      return 1;
}

char TestDiver()
{
      system("ipconfig > D:\\ping.t");
      string TextReadSize;
      strcpy_s(str, "默认网关");

      while (getline(MyFile, TextReadSize))
      {
                if (TextReadSize.find(str) != string::npos)
                {
                        return 0;
                }
      }
      return 1;
}


这一段代码放到MFC里面是第一次查找可以正常查找,第二次的查找就直接返回1了。
这一段代码放到 控制台运行 2次都没工作。求解、

已解决:是ifstream MyFile("D:\\ping.t"); 这句话不能放到全局变量的位置
因为这句话放在整个代码的前面会导致文件在第一次使用的时候可以正常打开,但是第二次使用的时候你如果不关闭它,则它是原来打开的数据,你如果关闭它,则它不会再重新被打开。

bester 发表于 2022-12-26 08:12

char StrPing = 'TTL';

char StrPing[] = {"TTL"};

另外 两个不同的文件 用同一个MyFile 不合规吧

无闻无问 发表于 2022-12-26 08:16

看看你的while有问题没…
你下断点,单步一行一行调试去排查,绝对比这儿问,慢慢等着强&#128077;…

yushiwen 发表于 2022-12-26 08:21

在MFC程序中,您可能会遇到这种情况:第一次调用FindSize函数时,函数会正常工作,但是第二次调用TestDiver函数时,函数却直接返回1。这是因为,MFC程序中的ifstream对象(这里的MyFile对象)可能在读取完文件之后没有被正确关闭,导致TestDiver函数无法再次读取文件。

在控制台程序中,每次执行完函数后都会自动关闭文件

隐藏英雄 发表于 2022-12-26 09:30

无闻无问 发表于 2022-12-26 08:16
看看你的while有问题没…
你下断点,单步一行一行调试去排查,绝对比这儿问,慢慢等着强&#128077;…

我才开始学这个东西,每问的一个问题都一行一行排查了好多次,而且百度了1-3小时,qq群里请教没人回答,实在是找不到问题所在,才会在这里请教。所以只能一边等待,一边查找。
while 以我现在的能力看 是没有问题。但是就是出错。

隐藏英雄 发表于 2022-12-26 09:33

bester 发表于 2022-12-26 08:12
char StrPing = 'TTL';

char StrPing[] = {"TTL"};


文件是同一个文件,只是在第一次查找完字符串以后。在第二次查找之前,这个文件的内容已经全部改变了。
现在出现的问题就是第二次查找的时候我发现TextReadSize 中的字符串居然是第一次文件中的某一行内容。 这货在第二次根本就不会重新再进行一行一行查询。连文件都不读。直接就返回1了

隐藏英雄 发表于 2022-12-26 09:37

yushiwen 发表于 2022-12-26 08:21
在MFC程序中,您可能会遇到这种情况:第一次调用FindSize函数时,函数会正常工作,但是第二次调用TestDiver ...

这个值得一试,确实是在第二次调用TestDiver函数的时,TextReadSize 中的字符串,莫名其妙的是第一次文件中的某一行内容,根本和第二次读取的内容没有关系,然后直接就返回1了。我试着加入关闭文件的代码后再进行试一试

bester 发表于 2022-12-26 10:05

隐藏英雄 发表于 2022-12-26 09:33
文件是同一个文件,只是在第一次查找完字符串以后。在第二次查找之前,这个文件的内容已经全部改变了。
...

有什么难以理解的,既然两个文件内容不一样,而且又是重写过的,那必然你要先关闭文件句柄再重新打开或者两个文件用不同的文件句柄变量,这写法明显不符合规范啊
页: [1]
查看完整版本: C++ 求解3