C++生成可执行文件exe

我想把一个读入数据并处理,然后存储数据的代码变成可执行文件.exe的形式。要求是在.exe执行时,输入需要读取和存入的文件位置,然后执行,平台为VS2010,c++。代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<iostream>
#include<math.h>
#include<stdlib.h>
#include<fstream>
#include<sstream>
#include <complex>
#include <string.h>
#include <iomanip>
using namespace std;
typedef struct record
{
    int serial_number;
    char code_name[128];
    char name[128];
    int number;
    char material[128];
    float single_weight;
    float total_weight;
    char material_code[128];
    char remark[128];
}record;
 
#define MAX_LINE 1024
static record records_[MAX_LINE];
 
int main()
{
    for(int j=0;j<MAX_LINE;j++)
    {
    char line[1024];
    int ret,i,count;

    string str1;
    str1="D:\\zhao\\0725\\处理前\\";
    ostringstream out;
    //out.setf(ios::showpoint);
    out<<str1<<j<<".txt";
    str1 = out.str();
    out.str("");
    const char* A = str1.data();
    FILE* f = fopen(A, "rb"); 
        if(!f)
            continue;
        else
        {
            cout<<"           "<<'\n';
            cout<<"读取"<<str1<<'\n';
        }
 
        for (i = 0; i < MAX_LINE; i++)
        {
            if(!fgets(line, 1024, f))
            break;
            ret = sscanf(line, "%d\t%[^\t]\t%[^\t]\t%d\t%[^\t]\t%f\t%f\t%[^\t]\t%s", &records_[i].serial_number, 
            records_[i].code_name, records_[i].name, &records_[i].number, records_[i].material,
            &records_[i].single_weight, &records_[i].total_weight, records_[i].material_code, records_[i].remark);
            //if(ret == 8)records_[i].remark[0] = 0;
            //else if(ret != 9)break;    
            if(records_[i].serial_number == 0)
            break;    
         }
    fclose(f);
    count = i;
    printf(" line count %d\n", count);    
    /*for (i = 0; i < count; i++)
    {
        cout<<"i="<<i<<'\t'<<records_[i].serial_number<<'\t'<<records_[i].remark<<'\n';
    } */
    string str2;
    str2="D:\\zhao\\0725\\处理后\\";
    ostringstream out1;
    //out.setf(ios::showpoint);
    out1<<str2<<"明细表"<<j<<".csv";
    str2 = out1.str();
    out1.str("");
    ofstream of1(str2);
    //of.setf(ios::fixed);
    if(!of1)
    {
        cout<<"不能存储文件"<<" "<<str2<<'\n';
        cin.get();
    }
    if(!f)
    {
        continue;
    }
    else
    {
        cout<<"           "<<'\n';
        cout<<"存储  "<<str2<<'\n';
        of1<<"序号"<<","<<"物料码"<<","<<"名称"<<","<<"代号"<<","<<"材料"<<","<<"数量"<<","<<"         "<<","<<"备注"<<'\n';
        for(i>0;i--;)//nnp:particle name//
        {

              of1<<records_[i].serial_number<<","<<records_[i].material_code<<","<<records_[i].name<<","<<records_[i].code_name
              <<","<<records_[i].material<<","<<records_[i].number<<","<<"         "<<","<<records_[i].remark<<'\n';
        }
    }

  }
        cout<<"Complete the calcula"<<'\n';
        system("pause");
        return 0;
}

也就是说在.exe可执行文件中首先输入37行代码“str1”的内容,即:

img


然后输入第73行代码“str2”的内容,即:

img


用于测试代码的文件如下链接,提取码1234。在我自己电脑上是成功编译的,请注意VS2010 C++。

https://pan.baidu.com/s/1Kx8JsQvgi-Sy8yiPlHnbLg

str1="D:\zhao\0725\处理前\";
->
cin >> str1;

str2="D:\zhao\0725\处理后\";
->
cin >> str2;

参考GPT;

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

using namespace std;

typedef struct record
{
    int serial_number;
    string code_name;
    string name;
    int number;
    string material;
    float single_weight;
    float total_weight;
    string material_code;
    string remark;
} record;

#define MAX_LINE 1024
static record records_[MAX_LINE];

int main()
{
    for (int j = 0; j < MAX_LINE; j++)
    {
        string str1, str2;
        cout << "请输入处理前的文件夹路径:";
        cin >> str1;
        cout << "请输入处理后的文件夹路径:";
        cin >> str2;

        ostringstream out;
        out << str1 << j << ".txt";
        str1 = out.str();
        out.str("");
        const char* A = str1.c_str();

        ifstream f(A);
        if (!f)
        {
            cout << "无法读取文件:" << str1 << '\n';
            continue;
        }
        else
        {
            cout << "读取" << str1 << '\n';
        }

        int i = 0;
        for (; i < MAX_LINE; i++)
        {
            string line;
            if (!getline(f, line))
                break;
            istringstream iss(line);
            iss >> records_[i].serial_number >> records_[i].code_name >> records_[i].name >> records_[i].number
                >> records_[i].material >> records_[i].single_weight >> records_[i].total_weight
                >> records_[i].material_code >> records_[i].remark;
            if (records_[i].serial_number == 0)
                break;
        }
        f.close();
        int count = i;
        cout << "line count: " << count << '\n';

        ostringstream out1;
        out1 << str2 << "明细表" << j << ".csv";
        str2 = out1.str();
        out1.str("");
        ofstream of1(str2);
        if (!of1)
        {
            cout << "不能存储文件" << " " << str2 << '\n';
            cin.get();
            continue;
        }
        else
        {
            cout << "存储  " << str2 << '\n';
            of1 << "序号" << "," << "物料码" << "," << "名称" << "," << "代号" << "," << "材料" << "," << "数量" << "," << "         " << "," << "备注" << '\n';
            for (int i = count - 1; i >= 0; i--) // 倒序输出
            {
                of1 << records_[i].serial_number << "," << records_[i].material_code << ","
                    << records_[i].name << "," << records_[i].code_name << "," << records_[i].material << ","
                    << records_[i].number << "," << "         " << "," << records_[i].remark << '\n';
            }
        }
    }
    cout << "Complete the calculation" << '\n';
    system("pause");
    return 0;
}

程序运行有错误吗?把错误贴出来。

没看懂问的是啥

您好,exe执行程序可以用cmd命令启动,需要传参数的话,可以使用main函数的两个参数配合使用,我想如果你要有输入,加上ui或许会更加方便,如果要做一个需要输入输出的软件(exe)的话

问题点是啥? 功能没实现还是实现了部分还有哪些问题待解决呢,问问题也是很深的学问哈

最好使用qt吧,可以简单设计个界面

C++程序打包生成EXE——以VS2019为例
可以参考下

打包成exe吗?害已经解决了

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    要将C++代码编译成可执行文件.exe,你可以按照以下步骤进行操作:

    1. 打开Visual Studio 2010,点击“文件”->“新建”->“项目”,选择“Win32控制台应用程序”。

    2. 在项目名称和位置处输入一个适当的名称和位置,然后点击“确定”。

    3. 在“Win32应用向导”对话框中,选择“空项目”,然后点击“完成”。

    4. 在解决方案资源管理器中,右击源文件文件夹,选择“添加”->“现有项”,找到你的C++代码文件,选择并点击“添加”。

    5. 将你的C++代码文件中的代码粘贴到Visual Studio代码编辑器中。

    6. 点击“生成”->“生成解决方案”来编译代码。

    7. 编译成功后,在解决方案资源管理器中找到你的项目文件夹,展开它,找到“Debug”或“Release”文件夹,这取决于你的编译设置。

    8. 在“Debug”或“Release”文件夹中,可以找到生成的可执行文件.exe。

    至此,你已经成功将C++代码编译成可执行文件.exe。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

建议你使用相对路径来处理

先要修改你的代码,在main函数中,使用输入来获取用户动态输入的数据文件的路径。

 
  int main(int argc, char* argv[])  
{  
    if (argc < 2)  
    {  
        // 输出用法信息  
        std::cout << "Usage: program_name file_path" << std::endl;  
        return 1;  
    }  
  
    // 获取输入文件路径  
    std::string inputFilePath = argv[1];  
  
    // 获取输出文件路径  
    std::string outputFilePath = argv[2];  
........

之后写好代码运行没有问题之后,需要将你的代码打包为exe文件。打包方法可以参考这个资料:
C++程序打包生成EXE——以VS2019为例:https://blog.csdn.net/qingyining/article/details/128517378

C++语言作为一种高效、快速、可靠的编程语言,广泛应用于系统软件、嵌入式系统、游戏开发、图形图像处理、科学计算、金融等领域。在编写C++程序之后,我们需要将代码编译成可执行文件进行执行和分发。本文将详细介绍如何生成C++可执行文件exe。

  1. 编写C++程序

首先,我们需要编写C++程序。可以使用任何文本编辑器(如notepad,Notepad++,Sublime Text等)编写C++代码。代码文件的扩展名为.cpp。

例如,以下是一个简单的C++程序,它将两个数相加并输出结果。

#include <iostream>
using namespace std;

int main()
{
    int a = 5;
    int b = 10;
    int c = a + b;
    cout << "The sum of " << a << " and " << b << " is " << c << endl;
    return 0;
}
  1. 编译C++程序

一旦编写了C++程序,我们需要将其编译成可执行文件。我们可以使用不同的编译器来编译C++程序。在Windows操作系统中,Visual Studio是一种流行的集成开发环境(IDE),它包含了一个强大的编译器。

使用Visual Studio编译器编译C++程序的步骤如下:

(1)打开Visual Studio。在主窗口中选择“新建项目”(New Project)。

(2)在“新建项目”对话框中,选择“Visual C++”(Visual C++)下的“空项目”(Empty Project)。

(3)为项目命名,并将其保存到本地磁盘上。

(4)将C++代码文件添加到项目中。选择“项目”(Project)下的“添加新项”(Add New Item),在弹出的对话框中选择“C++文件”(C++ File)类型,命名并保存文件。

(5)单击“生成”(Build)菜单下的“生成解决方案”(Build Solution),按下“F7”键或单击“生成”菜单下的“生成”(Build)命令来编译C++程序。

当编译器完成编译并没有错误时,可执行文件exe就会被生成到项目的“Debug”或“Release”目录下,具体取决于编译器和项目的设置。

  1. 运行C++可执行文件

一旦生成了可执行文件exe,我们就可以运行它来执行程序。

在Windows操作系统中,我们可以直接双击exe文件来运行程序。或者我们可以从命令行窗口中运行exe文件。

例如,如果生成的可执行文件名为“Program.exe”,我们可以使用以下命令行来运行程序:

C:\> Program.exe
  1. 分发C++可执行文件

一旦生成了可执行文件exe,我们就可以将其分发给其他人,让他们运行程序。我们可以将可执行文件复制到一个USB驱动器、光盘或通过互联网发送给其他人。

需要注意的是,可执行文件exe可能会受到病毒和恶意软件的攻击,因此必须谨慎处理和分发。建议只从可信来源获得可执行文件。

总结

本文简要介绍了如何生成C++可执行文件exe。具体来说,我们需要编写C++程序、使用编译器将其编译成可执行文件,并且可以将其分发给其他人。C++是一种广泛应用的高效编程语言,生成可执行文件exe是C++编程的重要部分。

C++ 生成可执行文件 (EXE) - 原理与详细介绍
C++ 是用于创建计算机程序的强大的编程语言。在 C++ 开发过程中,为了将编写的代码编译成可以在 Windows 操作系统上运行的可执行文件(.exe),需要经历若干步骤。这篇文章将详细解析 C++ 代码生成可执行文件 (EXE) 的原理和过程。
一、编写源代码
首先,开发者需要用 C++ 语言编写源代码。源代码 (Source Code) 是计算机程序的人类可读部分,它包含了程序员写在源文件中的指令。例如:

// main.cpp
#include
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}

二、预处理
预处理 (Preprocessing) 是对源代码进行预处理的过程。在这个阶段,预处理器负责处理源文件中以井号 (#) 开头的命令,如 #include、#define、#ifdef 等。经过预处理后的文件会成为编译器编译的输入。
例如:在上示源代码中,我们使用了 "#include
" 以包含 iostream 标准库。预处理器会将 iostream 文件的内容插入到源代码中以替换 "#include
",从而生成处理后的源代码 ready for 编译。
三、编译
编译 (Compilation) 是将预处理后的源代码翻译成目标代码 (Object Code) 的过程。目标代码通常是以二进制代码表示的低级机器代码或者程序中间代码(如汇编语言)。编译器对程序中的每个源文件进行独立编译,得到对应的目标文件 (.obj or .o)。
以 Windows 的 Visual Studio 编译器为例,示例代码的编译 might look like this:

cl /c /EHsc main.cpp

四、链接
链接 (Linking) 是将一个或多个目标文件组合成一个完整的可执行文件 (EXE) 或库文件 (DLL) 的过程。链接器首先确定各个目标文件之间的引用关系,并将他们组织为一个整体。接着,链接器解析并填充所有外部依赖,如函数调用、全局变量等。如果编译过程中出现未解析的外部引用,链接器会报告错误。
在这个阶段,链接器还会处理程序入口点(如 main() 函数),以及适当的程序初始化和终止代码。最后,链接器生成一个可执行文件(.exe)。
例如,在 Windows 系统上使用 Visual Studio 链接器:

link main.obj /OUT:main.exe

五、执行
至此,编写的 C++ 程序已经生成了可执行文件。现在,如果用户想要运行这个可执行文件,只需要双击它或者在命令行中输入文件名即可:

main.exe

总结
C++ 生成可执行文件的过程涉及到预处理、编译和链接三个阶段。在这个过程中,源代码经历了从人类可读的文本到底层机器代码的转换。最终生成的可执行文件包含了程序的全部逻辑和执行所需的资源。理解 C++ 生成 EXE 的原理和过程,可以帮助开发者更好地编写和调试程序

参考newbing
要将C++代码生成可执行文件.exe,你可以按照以下步骤进行操作:

  1. 打开Visual Studio 2010,并创建一个新的空项目。
  2. 在项目中添加一个新的源文件,将你的C++代码粘贴到该源文件中。
  3. 在Visual Studio 2010中的解决方案资源管理器中,右键单击项目,并选择“属性”选项。
  4. 在属性窗口中,选择“配置属性”>“常规”>“输出目录”选项,设置你希望生成的可执行文件的输出目录。
  5. 在属性窗口中,选择“配置属性”>“链接器”>“系统”选项,将“子系统”设置为“控制台 (/SUBSYSTEM:CONSOLE)”。
  6. 在属性窗口中,选择“配置属性”>“链接器”>“输入”选项,将“附加依赖项”设置为你需要的库文件(如果有)。
  7. 点击“生成”菜单,选择“生成解决方案”或按下快捷键Ctrl + Shift + B,以生成可执行文件。

生成的可执行文件将位于你在步骤4中设置的输出目录中。你可以双击该可执行文件并在控制台中输入需要读取和存储的文件位置,然后执行你的代码。