【问题标题】:Input from a text file to get a char C++从文本文件输入以获取 char C++
【发布时间】:2012-10-31 00:36:17
【问题描述】:

我在 .txt 文件文本中的修饰符后获取输入时遇到问题。 我想要做的是,如果 .txt 文件有“类型:”这个词,那么之后的任何内容都将被放入一个字符中。 到目前为止我的代码:

#include "stdafx.h"
#include <windows.h>
#include "VKH.h"
#include "Strmif.h"
#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>

void GetDocumentandRead() {
string line;
ifstream myfile (line1);
if (myfile.is_open())
{
  while ( !myfile.eof() )
  {
    getline (myfile,line);
    char aline[100];
    strcpy(aline, line.c_str());
    printf(aline, "\n");
    if (line.compare("mouseup") == 0){
        MouseUp(10);
    }
    if (line.compare("mousedown") == 0){
        MouseDown(10);
    }
    if (line.compare("mouseright") == 0){
        MouseRight(10);
    }
    if (line.compare("mouseleft") == 0){
        MouseLeft(10);
    }
    if (line.compare("mouseclick") == 0){
        MouseClick();
    }
    if (line.compare("enter") == 0){
        Enter();
    }
    if (line.compare("ctrltab") == 0){
        CtrlTab();
    }
    if (line.compare("tab") == 0){
        Tab();
    }
    if (line.compare("altf4") == 0){
        AltF4(0);
    }
    if (line.compare("alttab") == 0){
        AltTab();
    }
    if (line.compare("mousecenter") == 0){
        MouseCenter();
    }
    if (line.compare(6,5,"type:") == 0){
      //Don't know what to put here...
    }
  }
  myfile.close();
 }

 else printf("\nUnable to open file\n\n");

}

所以在文本文件中的“type:”之后,它会使用我调用的函数 TypeStr();

void TypeStr(char *lpszString)
{
  char cChar;
  while((cChar=*lpszString++)) // loops through chars
  {
    short vk=VkKeyScan(cChar); // keycode of char
    if((vk>>8)&1){keybd_event(VK_LSHIFT,0,0,0);} // hold shift if necessary
    keybd_event((unsigned char)vk,0,0,0); // key in
    keybd_event((unsigned char)vk,0,KEYEVENTF_KEYUP,0); // key out
    if((vk>>8)&1){keybd_event(VK_LSHIFT,0,KEYEVENTF_KEYUP,0);} // release shift if necessary
  }
}

任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 除了发布一个现有“文本”文件的 small 示例,该文件具有与此代码相关的输入,您已经说明了您想要什么。这就是您尝试得到的全部内容吗?也许调试了它?从您的测试和调试来看,它似乎在做什么?

标签: c++ file text input


【解决方案1】:

首先你应该重写你的TypeStr 函数,让它接受const char *。像这样

void TypeStr(const char *lpszString)
{
    ...
}

无需其他更改。

那么你应该像这样从你的代码中调用那个函数

if (line.compare(6,5,"type:") == 0){
   TypeStr(line.c_str() + 11);
}

您必须将TypeStr 函数更改为const char*(除了它是一般的好样式)的原因是std::stringc_str() 方法返回const char* 而不是char*

【讨论】:

  • 为什么+11,“type:”后面的字符不应该是+6吗?
  • @acraig5075 因为比较从行的第 6 个字符开始,所以 "type:" 是接下来的五个字符,所以 "type:" 之后的第一个字符是行的第 11 个字符(都计数当然是零)。
  • 谢谢!我已经在 TypeStr 方法中使用了 char *lpszString。非常有帮助!这也适用于我:char aline[100]; strcpy(aline, line.c_str()); TypeStr(aline + 11);我不知道为什么。
  • @user1815591 alineline 的副本,所以line.cstr() + 11aline + 11 是同一件事。我想知道aline,我在您的代码中看不到任何使用它的理由。在一个程序中拥有相同信息的两个副本通常是个坏主意。当然,如果您的行恰好超过 100 个字符,那么使用 aline 将失败。除非你有充分的理由保留它,否则我会删除它。
猜你喜欢
  • 2014-03-06
  • 2014-12-14
  • 1970-01-01
  • 2013-05-24
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2016-02-08
相关资源
最近更新 更多