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

问题描述

我正在编写一个C程序,该程序从 .txt 文件读取表数据,对其进行更改,然后将修改后的表打印到另一个 .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 对表进行更改。

代码可以正常工作并执行应有的功能,但是我还没有找到一种更好的方法来从参数向量中读取 [row] 参数。如何不仅读取第一个数字,还读取该参数字符串内的整个整数?

解决方法

要将包含数字的字符串转换为row_number = atoi(argv[i]);

row_number

此外,您不应该在签名中获得row_number。您没有使用它的值,并且您对int row_number = 0; 所做的任何更改都不会影响调用函数。 您应该在函数内部定义它:

db.session.flush()
,

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

此外,使用argv比索引索引更简单。

而且,如果您有以下说法:

23 irow 17

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

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

而且,您可以/应该使用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;
}