我在做一个算法练习。基本上,测试用例将在几个3*5矩阵中输入一个数字的形状,我们需要得到该形状表示的数字。
输入(测试用例)如下所示,表示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。
有人能告诉我这里发生了什么吗?
新更新:
我无法重现你给出的代码的问题,这必须取决于编译器和它运行的操作系统。
但是:至少出了点问题这个代码:什么时候 gets 读取3个字符,由于结尾,它在内存中存储4个字符 \0 最后加上。所以你不应该直接在 code 数组;只需读入另一个较长的缓冲区 memcpy 数组中只有3个字符。
gets
\0
code
memcpy
#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); } }