我正在做算法练习。基本上,测试用例将在几个3 * 5矩阵中输入数字的形状,我们需要得到形状所代表的数字。
所以,我创建了一个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.
有人可以告诉我这里发生了什么吗?
答案 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);
}
}