错误示例
好久不写c了,今天一写果然出了问题,解决了一些列问题之后,我发现代码可以跑通,而且逻辑没啥问题,但是scanf那里,输入两次才出一次计数,具体代码如下:
int main() {
int lenght = 0;
int count = 0;
printf("请输入链表LA的长:\n");
scanf("%d", &lenght);
int* a = (int*)calloc(lenght, sizeof(int));
printf("链表长为%d\n", lenght);
printf("请输入降序的数组:\n");
int i = 0;
while ( i < lenght ) {
count += 1;
printf("count值为%d\n", count);
scanf("%d ", a+i); //请注意这里我加了一个空格
i++;
}
printf("打印数组:\n");
for (int j = 0; j < lenght; j++) {
printf("%d ", a[j]);
}
free(a);
return 0;
}
错误结果
可以看到:在运行了一次printf("count值为:%d\n",count);
之后运行了两次scanf
,但是打印的数组确实又没啥问题。
这是肿么肥事捏!!!?
我也不知道QAQ
解决方法
在尝试反复去掉加上\n
之后,我把scanf后面空格删除了
于是,正确代码如下:
int main() {
int lenght = 0;
int count = 0;
printf("请输入链表LA的长:\n");
scanf("%d", &lenght);
int* a = (int*)calloc(lenght, sizeof(int));
printf("链表长为%d\n", lenght);
printf("请输入降序的数组:\n");
int i = 0;
while ( i < lenght ) {
count += 1;
printf("count值为%d\n", count);
scanf("%d", a+i); //注意这里没有空格了!!!
i++;
}
printf("打印数组:\n");
for (int j = 0; j < lenght; j++) {
printf("%d ", a[j]);
}
free(a);
return 0;
}
于是,我的结果终于正确了,大哭.gif
正确结果示例
总结: 代码出现格式问题的时候,就去找格式的问题。虽然这很离谱,但有用。