吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 819|回复: 7
收起左侧

[已解决] C++ 求解3

[复制链接]
隐藏英雄 发表于 2022-12-25 22:15
本帖最后由 隐藏英雄 于 2022-12-26 11:06 编辑

[C++] 纯文本查看 复制代码
#include <fstream>
#include <iostream>
#include <sstream>

using namespace std;

char FindSize();
char TestDiver();
char str[20];

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函数无法再次读取文件。

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

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
隐藏英雄 + 1 + 1 有意义的回复,谢谢您的思考!

查看全部评分

 楼主| 隐藏英雄 发表于 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热心值 +1 收起 理由
隐藏英雄 + 1 我在文件第一次使用完,返回前加入MyFile.close(); 好像没起作用。不知道是.

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表