尝试scanf,但是除非输入另一个值,否则无法访问它

时间:2019-01-31 10:18:21

标签: c scanf

我试图动态地初始化数组,但是当我进入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;
}

2 个答案:

答案 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"应该会有所帮助。我已经在本地对其进行了测试,并且能够一次输入所有值。