C 在列中添加整数值

C 在列中添加整数值,c,C,我必须向行中添加整数值 我必须使用strstr函数找到字符串 从字符串_1(坐标)到字符串_2(结束坐标),我将整数值添加到行中 给我一些建议如何执行此操作 示例输入文件 示例输出文件 代码 #包括 #包括 #包括 #包括 文件*文件输入; 文件*文件输出; #定义坐标“坐标” #定义端点坐标“端点坐标” int main(){ 字符行[256]; 内芯线、X芯线、Y芯线、Z芯线; int change_in_X_cord,change_in_Y_cord,change_in_Z_cord; i

我必须向行中添加整数值

  • 我必须使用strstr函数找到字符串
  • 从字符串_1(坐标)到字符串_2(结束坐标),我将整数值添加到行中
  • 给我一些建议如何执行此操作
  • 示例输入文件 示例输出文件 代码
    #包括
    #包括
    #包括
    #包括
    文件*文件输入;
    文件*文件输出;
    #定义坐标“坐标”
    #定义端点坐标“端点坐标”
    int main(){
    字符行[256];
    内芯线、X芯线、Y芯线、Z芯线;
    int change_in_X_cord,change_in_Y_cord,change_in_Z_cord;
    int user_X_输入、user_Y_输入、user_Z_输入;
    用户输入=100;
    用户输入=200;
    用户_Z_输入=300;
    ///堇酸盐的变化
    更改_X_线中的_=X_线+用户_X_输入;
    更改_in_Y_cord=Y_cord+用户_Y_输入;
    更改_-in_-Z_线=Z_线+用户_-Z_输入;
    ///文件输入
    file_input=fopen(“file_output.domm”,“r”);
    if(文件输入=NULL)
    {
    佩罗尔(“福彭”);
    退出(退出失败);
    }
    printf(“%s\n”坐标);
    ///文件输出
    file_output=fopen(“file_output2.domm”,“w”);
    if(文件输出==NULL)
    {
    佩罗尔(“福彭”);
    退出(退出失败);
    }
    printf(“%s\n”结束坐标);
    while(fgets(行、sizeof(行)、文件输入)){
    如果(!strstr(直线、坐标)){
    继续;
    }
    如果(!fgets(行、行大小、文件输入)){
    返回3;
    }
    //请给我建议如何执行此操作
    /*
    而(fscanf(文件输入,“%d%d%d%d”、&SI\u编号、&X\u线、&Y\u线和&Z\u线)){
    if(strstr(直线、端点坐标)){
    返回0;
    }
    printf(“%d%d%d%d\n”,X_线,Y_线,Z_线);
    printf(“%d%d%d%d”,更改X_线中的_,更改Y_线中的_,更改Z_线中的_);
    }
    */
    }
    }
    
    如果我理解您的要求,那就是“如何使用
    strstr
    识别包含
    “坐标”
    的行,然后对该行后面的行进行处理,直到到达包含
    “END\u坐标”
    的行,保持其余行不变。”

    在需要计算函数时总是从哪里开始(或者如果没有安装手册页,则从哪里开始?返回什么?(“指向子字符串开头的指针,或者如果找不到子字符串,则为NULL”)

    为了在代码中使用返回进行比较,您最好保存它,例如:

    ...
    while (fgets (buf, MAXC, fp)) {
        char *p = buf;
        /* does buf contain "COORDINATES"? */
        if ((p = strstr (buf, "COORDINATES"))) {
        ...
    
    因此,您已经阅读了每一行并找到了
    “坐标”
    。如果
    p
    中保存了
    str
    的返回,您如何测试
    buf
    是否以
    “坐标”
    开头

    如果
    buf
    “坐标”
    开头,那么
    p
    将指向哪里?(回忆返回:“指向子字符串开头的指针”),如果
    buf
    p
    都指向
    “坐标”
    ,那么您已经找到了行
    “坐标”

    如果
    buf
    包含
    “坐标”
    ,但不以它开头(例如
    p!=buf
    ),则您已找到
    “结束坐标”

    如何知道您是否已经找到了
    “坐标”
    ,但尚未遇到
    “END\u坐标”
    ?最简单的方法是在遇到
    “坐标”
    时设置一个类似
    int coords=1的标志,然后在
    “END\u坐标”处将其设置为
    0
    。然后只需检查
    是否(协调){/*do stuff to rows*/}
    。示例:

        int coords = 0;     /* flag indicating between tags */
        ...
        while (fgets (buf, MAXC, fp)) { /* read each line */
            char *p = buf;
            /* does buf contain "COORDINATES"? */
            if ((p = strstr (buf, "COORDINATES"))) {
                if (p == buf) { /* does buf begin with it? */
                    printf ("start mod of rows.\n");
                    coords = 1;  /* set flag */
                }
                else {  /* contains, but doesn't begin with */
                    printf ("end mod of rows.\n");
                    coords = 0;  /* unset flag */
                }
            }
            else if (coords) /* flag set, modify rows */
                printf ("modify: %s", buf);
        }
        ...
    
    在一个展示如何使用
    strstr
    识别要修改的行的示例中将这些部分放在一起(其余部分由您决定),您可以执行以下操作:

    #include <stdio.h>
    #include <string.h>
    
    #define MAXC 512
    
    int main (int argc, char **argv) {
    
        char buf[MAXC] = "";
        int coords = 0;     /* flag indicating between tags */
        FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
    
        if (!fp) {  /* validate file open for reading */
            fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
            return 1;
        }
    
        while (fgets (buf, MAXC, fp)) { /* read each line */
            char *p = buf;
            /* does buf contain "COORDINATES"? */
            if ((p = strstr (buf, "COORDINATES"))) {
                if (p == buf) { /* does buf begin with it? */
                    printf ("start mod of rows.\n");
                    coords = 1;  /* set flag */
                }
                else {  /* contains, but doesn't begin with */
                    printf ("end mod of rows.\n");
                    coords = 0;  /* unset flag */
                }
            }
            else if (coords) /* flag set, modify rows */
                printf ("modify: %s", buf);
        }
    
        if (fp != stdin) fclose (fp);     /* close file if not stdin */
    
        return 0;
    }
    

    如果您还有其他问题,请仔细查看并告诉我。

    您的实际问题是什么?我不确定数据中的数字代表什么,或者您应该添加什么值。而且我无法从您的描述中看出您遇到了什么具体问题。@Caleb我在第2列到第4列中添加了整数值。例如,第二栏我必须加100,第三栏200和第三栏300。是什么阻止了你这么做?你似乎拥有你需要的所有工具(加法,
    fscanf()
    ,循环),那么除了“告诉我怎么做”之外还有什么问题你有吗?@Caleb我已经写了这段代码,但是在执行操作时,它没有按照要求读取输入文件并打印输出。在调试这样的代码时,一个很好的问题是“它做了什么?”很明显,它并没有达到你的目的,或者你不会调试它,但它实际上是做什么的?你能添加更多的打印语句来了解它在做什么吗?相信我,这样的调试技巧多年来会得到很大的回报。有时我发誓我所做的就是在代码中添加打印语句来找出我做错了什么。
    ...
    while (fgets (buf, MAXC, fp)) {
        char *p = buf;
        /* does buf contain "COORDINATES"? */
        if ((p = strstr (buf, "COORDINATES"))) {
        ...
    
        int coords = 0;     /* flag indicating between tags */
        ...
        while (fgets (buf, MAXC, fp)) { /* read each line */
            char *p = buf;
            /* does buf contain "COORDINATES"? */
            if ((p = strstr (buf, "COORDINATES"))) {
                if (p == buf) { /* does buf begin with it? */
                    printf ("start mod of rows.\n");
                    coords = 1;  /* set flag */
                }
                else {  /* contains, but doesn't begin with */
                    printf ("end mod of rows.\n");
                    coords = 0;  /* unset flag */
                }
            }
            else if (coords) /* flag set, modify rows */
                printf ("modify: %s", buf);
        }
        ...
    
    #include <stdio.h>
    #include <string.h>
    
    #define MAXC 512
    
    int main (int argc, char **argv) {
    
        char buf[MAXC] = "";
        int coords = 0;     /* flag indicating between tags */
        FILE *fp = argc > 1 ? fopen (argv[1], "r") : stdin;
    
        if (!fp) {  /* validate file open for reading */
            fprintf (stderr, "error: file open failed '%s'.\n", argv[1]);
            return 1;
        }
    
        while (fgets (buf, MAXC, fp)) { /* read each line */
            char *p = buf;
            /* does buf contain "COORDINATES"? */
            if ((p = strstr (buf, "COORDINATES"))) {
                if (p == buf) { /* does buf begin with it? */
                    printf ("start mod of rows.\n");
                    coords = 1;  /* set flag */
                }
                else {  /* contains, but doesn't begin with */
                    printf ("end mod of rows.\n");
                    coords = 0;  /* unset flag */
                }
            }
            else if (coords) /* flag set, modify rows */
                printf ("modify: %s", buf);
        }
    
        if (fp != stdin) fclose (fp);     /* close file if not stdin */
    
        return 0;
    }
    
    $ ./bin/coords dat/coords.txt
    start mod of rows.
    modify: 5   10   20   30
    modify: 5   10   20   30
    modify: 5   10   20   30
    modify: 5   10   20   30
    modify: 5   10   20   30
    modify: 5   10   20   30
    modify: 5   10   20   30
    modify: 5   10   20   30
    end mod of rows.