我试图动态地初始化数组,但是当我进入while
循环中的第一时间printf
打印语句,但接下来的printf
语句不执行,除非我赋予另一个价值。我想把值放在
0--->n-1
第一次执行printf
语句,但是第二次不执行,除非输入任何值。尝试输入5作为大小,然后输入0、1、2、3、4作为值。
#include <stdio.h>
#include <malloc.h>
void main() {
Ex5();
system("pause");
}
void Ex5()
{
int size_a,n_res=0,res=0;
int *arr_a = input_array_dyn(&size_a);
res = includes(arr_a, size_a);
printf("res is %d ", res);
free(arr_a);
}
int* input_array_dyn(int *size) {
int i=0, *p_to_arr;
printf("enter size of arr:");
scanf_s("%d", size);
p_to_arr = (int*)calloc(*size,sizeof(int));
while(i<*size) {
printf("enter %d element", i);
scanf_s(" %d ", &p_to_arr[i]);
i++;
}
return p_to_arr;
}
答案 0 :(得分:3)
中的格式字符串
scanf_s(" %d ", &p_to_arr[i]);
很麻烦,可能是造成问题的原因。
格式字符串的问题是尾随空格。尾随空格表示scanf_s
将读取所有尾随空格字符,直到没有更多空格为止。问题是要让scanf_s
知道没有更多的空格,您必须输入一些非空格输入。
这会导致scanf_s
被阻止,直到您编写第二个输入为止。
解决方案是在格式字符串中完全没有空格:
scanf_s("%d", &p_to_arr[i]);
也不需要前导空格,因为"%d"
说明符将自动跳过前导空格。
答案 1 :(得分:1)
如果我对您的理解正确,将第二个scanf
的格式更改为"%d"
应该会有所帮助。我已经在本地对其进行了测试,并且能够一次输入所有值。