如何在c中用空格初始化2D char数组

时间:2018-06-06 04:47:53

标签: c for-loop multidimensional-array input char

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

输入(测试用例)看起来像这样,代表0123456789): 0123456789

所以,我创建了一个3 * 5矩阵,我输入了一些仅用于测试的启动。 但是,它没有那么好用。

由于输入中有空格,所以我认为scanf不起作用。我正在使用获取,每一行。

    #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.我的值会增加到3然后又回到0.

enter image description here

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

新的更新: enter image description here

1 个答案:

答案 0 :(得分:1)

我无法使用您提供的代码重现问题,它必须取决于编译器及其运行的操作系统。

但是:这个代码至少有问题:当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);
    }
}