不确定我的while循环中发生了什么

Pau*_*aul 1 c arrays scanf while-loop

我对编程和学习基础知识完全陌生.我无法弄清楚我的输出发生了什么.请帮忙.

这是我的代码(在mac上使用xcode)

// C Programing
// Program 6C: Basic While loop Example 2
// In this program we will demonstrate the use of basic while loop

#include <stdio.h> 


int main()
{

int values = 1;
int count = 1;
int value_array[values];

printf("Please enter how many values you have:  ");
scanf("%d", &values);

printf("You entered %d values.\n",values);

while (count <= values)
{
printf("Please enter your %d\n value:   ", count);
scanf("%d", &value_array[count]);
count++;
}

count = 1;

while (count <= values)
{
    printf("For the %d value you entered %d.\n", count, value_array[count]);
    count++;
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我的输出(不知道为什么我输入的一些值为31)

请输入您拥有的值:10
您输入了10个值.
请输入您的1值:1
请输入您的2值:2
请输入您的3值:3
请输入您的4值:4
请输入您的5值:5
请输入您的6值:6
请输入您的7值:7
请输入您的8值:8
请输入您的9值:9
请输入您的10值:10输入您输入

的1值1.输入
的2值2.输入
的3值3.输入
的4值4.
对于您输入的5值5.
对于您输入的6值31.
对于您输入的7值1.
对于您输入的8值31
对于您输入的9值9.
对于您输入的10值10.
程序以退出代码结束:0

我认为我做的一切都是对

Ric*_*dle 5

你的数组已经结束了.这个:

int values = 1;
int value_array[values];
Run Code Online (Sandbox Code Playgroud)

创建一个单元素数组,但是然后将其视为一个10元素数组(或更多).这会调用"未定义的行为",这基本上意味着所有的赌注都关闭,程序可能会做任何事情.

  • +1加上这个索引是错误的(基于1时它应该是从零开始)并且它是UB的配方. (3认同)