Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
While循环不希望在C中正常工作_C_Arrays_While Loop - Fatal编程技术网

While循环不希望在C中正常工作

While循环不希望在C中正常工作,c,arrays,while-loop,C,Arrays,While Loop,我想在数组中存储一些值,并希望当用户输入0时数组停止存储值 所以我有这个代码: int numbers[100]; int i = 0; do { printf("Enter the %d value : ", (i+1) ); scanf("%d", &numbers[i]); i++; }while (numbers[i] != 0); 但它不起作用,我花了2个小时在这上面。 请帮忙 谢谢,它们很好用 但在检查条件之前,请先增

我想在数组中存储一些值,并希望当用户输入0时数组停止存储值 所以我有这个代码:

int numbers[100];
int i = 0;

do

{

        printf("Enter the %d value : ", (i+1) );
        scanf("%d", &numbers[i]);

        i++;
}while (numbers[i] != 0);
但它不起作用,我花了2个小时在这上面。 请帮忙 谢谢,它们很好用

但在检查条件之前,请先增加
i

尝试
}同时(数字[i++]!=0)并删除上一行中的
i++

它们工作正常

但在检查条件之前,请先增加
i


尝试
}同时(数字[i++]!=0)并删除前一行中的
i++

在@p_uuj_u_u的答案上展开,这样做:

int numbers[100];
int i = 0;

do
{
    printf("Enter the %d value : ", (i+1) );
    scanf("%d", &numbers[i]);

}while (numbers[i++] != 0);

缺少了一些分号,但主要问题是在
while
条件下使用之前先递增
i
i++
返回
i
的原始值,然后将其递增。

在@p_uuj_u_u的答案上展开,这样做:

int numbers[100];
int i = 0;

do
{
    printf("Enter the %d value : ", (i+1) );
    scanf("%d", &numbers[i]);

}while (numbers[i++] != 0);


缺少了一些分号,但主要问题是在
while
条件下使用之前先递增
i
i++
返回
i
的原始值,然后将其递增。

第一行
i++
缺少分号后缺少分号。Post和对不起作用的内容的正确描述。
i++
意味着您正在重复检查do while条件中未初始化的数据,顺便说一句。即使您修复了语法,您的程序仍会调用未定义的行为。您也没有尝试验证实际工作的scanf
scanf
(它有一个返回值是有原因的;)。这是一个正在等待发生的隐藏的条件错误。您将用户值写入
numbers[i]
(例如
numbers[2]
),然后递增
i
(例如
3
)并测试
numbers[i]/*新的i*/(例如
numbers[3]
)这不再是用户编写的内容。Pmg、Eugene、Whozcraig感谢您的评论。1.实际上我在代码中放了分号,我只是在重新复制时出错了;2.当我在
i++
第一行中输入0.missing分号后,表不希望停止存储值的不起作用的内容。Post和对不起作用的内容的正确描述。
i++
意味着您正在重复检查do while条件中未初始化的数据,顺便说一句。即使您修复了语法,您的程序仍会调用未定义的行为。您也没有尝试验证实际工作的scanf
scanf
(它有一个返回值是有原因的;)。这是一个正在等待发生的隐藏的条件错误。您将用户值写入
numbers[i]
(例如
numbers[2]
),然后递增
i
(例如
3
)并测试
numbers[i]/*新的i*/(例如
numbers[3]
)这不再是用户编写的内容。Pmg、Eugene、Whozcraig感谢您的评论。1.实际上我在代码中放了分号,我只是在重新复制时出错了;2.当我输入0.P_uu_uj_u_u时,表不希望停止存储值,这是不起作用的-您是对的,但是OP的代码也有其他问题。建议:为什么不举一个完整的例子呢?我试过了,现在已经可以用了。谢谢,但我真的不明白,你能解释一下“while(number[i++]”是如何工作的吗?因为i++在检查p_uuuj_uuu之后增加了-你是对的,但是OP的代码也有其他问题。建议:为什么不举一个完整的例子呢?我试过了,现在已经可以用了。谢谢,但我真的不明白,你能解释一下“while(number[i++])”是如何工作的吗?因为i++在检查之后增加了Q:“while()”表达式是什么吗。我相信这没关系,因为我相信“!=”引入了一个序列点。问:你试过吗?它有效吗?好吧,如果我们有像
number[i++]!=我
。但这似乎不是未定义的行为,它是有效的。编辑:如果您使用
数字[i++]!=我
并使用标志
-Wall-Werror
进行编译,您会得到一个未排序的修改错误。但是使用
数字[i++]!=0
不会抛出错误。很漂亮-我就是这么想的。谢谢你的确认:)终于开始工作了,谢谢你。我刚刚删除了条件测试之前的“I++”,并将其放在条件测试本身中(while number[I++]),但我并不真正理解它,你能解释一下“while(number[I++])”是如何工作的吗?问:“while()”表达式吗。我相信这没关系,因为我相信“!=”引入了一个序列点。问:你试过吗?它有效吗?好吧,如果我们有像
number[i++]!=我
。但这似乎不是未定义的行为,它是有效的。编辑:如果您使用
数字[i++]!=我
并使用标志
-Wall-Werror
进行编译,您会得到一个未排序的修改错误。但是使用
数字[i++]!=0
不会抛出错误。很漂亮-我就是这么想的。谢谢你的确认:)终于开始工作了,谢谢你。我刚刚删除了条件测试之前的“I++”,并将其放在条件测试本身中(while number[I++]),但我真的不理解它,你能解释一下“while(number[I++])”是如何工作的吗?