gpt4 book ai didi

c - 如何在函数调用和参数中使用命令行参数?

转载 作者:行者123 更新时间:2023-11-30 18:45:18 24 4
gpt4 key购买 nike

我正在尝试从主函数中读取参数。我的问题是如何获取每个参数以便将它们放入函数中。我知道我必须使用类似 strcmp( argv[ currentArg ], "albus") == 0 的东西,但我对如何做到这一点感到非常困惑,特别是因为可能有不同数量的参数。例如:

./cnp cut 13 5 copy 33 7 paste 1 input-b.txt output.txt

cnp为主文件名剪切复制粘贴关键字是程序中的函数这些数字是函数必须剪切、粘贴和复制的索引input-b.txt output.txt 是文件。

在这里,我们要求它从第 13 列开始剪切 5 个字符。这应该剪切每个名称后面的 3 位数字。然后,我们要求它复制第 33 至 39 列中的内容;这是从第 33 列开始的 7 个字符,它应该为我们提供每行最后一个 float 的副本。然后,我们告诉它将其粘贴到行的开头,从而在每行的开头为我们提供这些数字的另一个副本。所以原来的样子是这样的

       Young  003   3  89.81  67.10  80.85  D
Venus 002 8 72.29 73.59 76.20 A
Jasmin 003 6 55.19 50.51 63.88 F
Micheal 001 3 98.93 91.37 99.00 C
Abram 001 2 50.23 90.14 57.36 E
Rigoberto 002 8 61.63 94.64 77.05 B
Noe 003 2 68.41 61.79 64.60 A
Kristin 002 5 77.34 84.68 65.16 B
Phillip 001 6 63.19 76.08 52.39 B
Monique 001 6 81.76 57.62 80.15 A
Verda 002 10 93.03 56.21 93.58 C
Louise 003 2 70.30 71.37 61.91 C
Vilma 001 9 71.09 93.43 76.72 G

程序运行后,如下所示:

80.85         Young   3  89.81  67.10  80.85  D
76.20 Venus 8 72.29 73.59 76.20 A
63.88 Jasmin 6 55.19 50.51 63.88 F
99.00 Micheal 3 98.93 91.37 99.00 C
57.36 Abram 2 50.23 90.14 57.36 E
77.05 Rigoberto 8 61.63 94.64 77.05 B
64.60 Noe 2 68.41 61.79 64.60 A
65.16 Kristin 5 77.34 84.68 65.16 B
52.39 Phillip 6 63.19 76.08 52.39 B
80.15 Monique 6 81.76 57.62 80.15 A
93.58 Verda 10 93.03 56.21 93.58 C
61.91 Louise 2 70.30 71.37 61.91 C
76.72 Vilma 9 71.09 93.43 76.72 G
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "buffer.h"
#include "document.h"

int main(int argc, char *argv[])
{

char



if(argc > 0) {


}

else {

}

return EXIT_SUCCESS;
}

粘贴、剪切、复制功能如下:

bool cut( char *line, int start, int n )
bool copy(char *line, int start, int n) 
bool paste(char *line, int start)

要读取并打印出来,我们有以下功能:

int readDocument( FILE *fp, char doc[ MAX_LINES ][ MAX_LENGTH + 1 ] )
void printDocument(FILE *fp, char doc[MAX_LINES][MAX_LENGTH + 1], int lines)

我已经完成了这些函数,但我需要有关在主函数中如何使用命令行参数的帮助。我使用的是 Linux 机器。

最佳答案

argv 中有一个字符串数组,如下所示:

{ "./cnp", "cut", "13", "5", "copy", "33", "7", "paste", "1", "input-b.txt", "output.txt" }

假设最后两个参数始终是输入和输出文件,我将循环从 1 到 arc - 3 的参数来处理命令,例如下面的草图不是完整的解决方案,但应该可以给您一些想法。

if (argc < 3) 
{
// Handle the fact that there were not enough arguments.
}
else
{
int commandArgs = argc - 2;
for (int i = 1 ; i < commandArgs ; ++i) // Start at 1 to omit program name
{
if (strcmp(argv[i], "cut") == 0)
{
if (commandArgs - i < 2)
{
// Handle not enough args to cut
}
else
{
// You have a cut command, call cut or save it to call cut later
i += 2; // Skip the two parameters
}
}
else if (strcmp(argv[i], "copy") == 0)
{
// similar pattern to above
}
else if (strcmp(argv[i], "paste") == 0)
{
// similar pattern to above
}
else
{
// Handle invalid command error
}
}
}

关于c - 如何在函数调用和参数中使用命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55147956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com