C - 如何读取参数向量中特定位置的整数?

C - How to read integer at certain place in the argument vector?

我正在编写一个 C 程序,它从 .txt 文件中读取 table 数据,对其应用更改并将修改后的 table 打印到一个不同的 .txt 文件。该程序的一部分是在 irow 参数之后在终端中输入的行之前打印和空行的函数。下面是程序的编译方式 运行:

gcc -Wall -Wextra -Werror -o main main.c
./main irow [row]  <tab1.txt >tab2.txt

处理输入的部分程序:

int insertRow(char*argv[], int row_number) {
    row_number = 0;
    for(int i = 0; argv[i]; i++) {
        if ( isdigit(argv[i][0]) && (strcmp(argv[i - 1], "irow") == 0))
            if((argv[i][0] - '0') > 0)
                row_number = argv[i][0] - '0';
    }
    return row_number;
}

然后 row_number 用于 main 方法来执行对 table.

的更改

代码可以正常工作并执行预期的操作,但是我还没有想出更好的方法来从参数向量中读取 [row] 参数。我怎样才能不仅读取第一个数字而且读取该参数字符串中的整个整数?

将包含数字的字符串转换为 int:

row_number = atoi(argv[i]);

此外,您不应该在签名中加入 row_number。您没有使用它的值,您对 row_number 所做的任何更改都不会影响调用函数。 您应该在函数内定义它:

int row_number = 0;

因为你的函数的第一个可执行语句是将row_number设置为0,所以不需要将它作为参数。它忽略传入的值和 returns 最终值。

此外,使用 argv 的方法比索引它更简单。

而且,如果您有以下参数:

23 irow 17

你的函数处理得不好。它会尝试解码 23 而不是 17

拥有一个“状态”变量并且一次只查看一个参数会更简单。

并且,您 can/should 使用 atoi 获取所有数字 [vs.仅解码数字字符串的第一位数字]。

这是重构后的版本:

#include <string.h>
#include <stdlib.h>

int
insertRow(char **argv)
{
    char *cp;
    int match = 0;
    int row_number = 0;

    for (cp = *argv++;  cp != NULL;  cp = *argv++) {
        // we just saw "irow", so this is the number
        if (match) {
            row_number = atoi(cp);
            break;
        }

        // if current token is "irow", next token is the number
        match = (strcmp(cp,"irow") == 0);
    }

    return row_number;
}