代码之家  ›  专栏  ›  技术社区  ›  Yizhi Hu

如何用C语言中的空格初始化二维字符数组

  •  0
  • Yizhi Hu  · 技术社区  · 8 年前

    我在做一个算法练习。基本上,测试用例将在几个3*5矩阵中输入一个数字的形状,我们需要得到该形状表示的数字。

    输入(测试用例)如下所示,表示0123456789: 0123456789

    所以,我已经创建了一个3*5矩阵,我输入了一些开始只是为了测试。 然而,它并没有那么好地工作。

    因为输入中有空格,所以我假设scanf不起作用。我每排都用GETS。

        #include<stdio.h>
        #include<stdlib.h>
        #include<string.h>
        int main(){
           char code[5][3];
           int i;
           for(i = 0; i < 5; i++){
              gets(code[i]);
              printf("%d\n",i);
           }
        }
    

    所以,如果我运行这段代码,我就无法退出循环,因为我的值永远不会超过3。i值会一直增加到3,然后再返回到0。

    enter image description here

    有人能告诉我这里发生了什么吗?

    新更新: enter image description here

    1 回复  |  直到 8 年前
        1
  •  1
  •   Joël Hecht    8 年前

    我无法重现你给出的代码的问题,这必须取决于编译器和它运行的操作系统。

    但是:至少出了点问题这个代码:什么时候 gets 读取3个字符,由于结尾,它在内存中存储4个字符 \0 最后加上。所以你不应该直接在 code 数组;只需读入另一个较长的缓冲区 memcpy 数组中只有3个字符。

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main(){
        char code[5][3];
        char line[100];
        int i;
        for(i = 0; i < 5; i++){
            fgets(line, sizeof line - 1, stdin);
            memcpy(code[i], line, 3);
            printf("%d\n",i);
        }
    }
    
    推荐文章