Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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
用C语言编写while循环_C - Fatal编程技术网

用C语言编写while循环

用C语言编写while循环,c,C,首先,我是一个完全的初学者,所以这个问题对你们大家来说可能非常明显,但我不明白这个程序中while循环有什么问题。该程序的目的是计算当用户想继续输入数字时输入0和当用户想停止输入1的数字之间的平均值,因此循环应该在用户输入1时停止,并在最后输入0时计算值的总和。这就是我写的,我使用stdio.h和stdlib.h作为库: int decision; int value; int sum = 0; float av; int order = 1; printf ("for continue pr

首先,我是一个完全的初学者,所以这个问题对你们大家来说可能非常明显,但我不明白这个程序中while循环有什么问题。该程序的目的是计算当用户想继续输入数字时输入0和当用户想停止输入1的数字之间的平均值,因此循环应该在用户输入1时停止,并在最后输入0时计算值的总和。这就是我写的,我使用
stdio.h
stdlib.h
作为库:

int decision;
int value;
int sum = 0;
float av;
int order = 1;

printf ("for continue press: 0\n ");
printf ("for stopping press: 1\n ");

while (decision == 0) {
    printf("input value:");

    scanf("%d", &value);
    sum = sum + value;

    printf ("continue?");

    scanf("%d", &decision);
    order = order + 1;
}
av = (float) sum / (float) order;

printf("the average is: %.2f", av);
return EXIT_SUCCESS;

终端显示的只是“平均值为:0.00”,它跳过了上面的整个操作。

在C中,声明变量不会初始化它。因此,
决策
的初始值或多或少是随机的。如果它不是零(很可能不是),则永远不会进入循环

相反,当处于“调试模式”或使用一些工具(如
valgrind
)时,内存可能会被归零或一致初始化,从而导致难以跟踪的“不可复制”错误。这就是为什么您确实希望始终初始化变量

尝试:

int decision = 0;
另外,启用所有编译器警告标志。当这种情况发生时,您希望得到警告,如果您告诉编译器,编译器可以这样做

另一种方式 您不需要在其他任何地方使用
decision
,因此最好在外部范围中少使用一个变量:

for (;;) {
    int decision; /* The variable only lives inside this loop */
    printf("input value:");

    scanf("%d", &value);
    sum = sum + value;

    printf ("continue?");
    scanf("%d", &decision);
    if (0 == decision) {
        break;
    }
    order = order + 1;
}
通知
如果从1开始
order
,并且只输入一个值,
order
将增加到2,这将取消您的计算。从0开始或在决策确认后增加值。

在C中,声明变量不会初始化它。因此,
决策
的初始值或多或少是随机的。如果它不是零(很可能不是),则永远不会进入循环

相反,当处于“调试模式”或使用一些工具(如
valgrind
)时,内存可能会被归零或一致初始化,从而导致难以跟踪的“不可复制”错误。这就是为什么您确实希望始终初始化变量

尝试:

int decision = 0;
另外,启用所有编译器警告标志。当这种情况发生时,您希望得到警告,如果您告诉编译器,编译器可以这样做

另一种方式 您不需要在其他任何地方使用
decision
,因此最好在外部范围中少使用一个变量:

for (;;) {
    int decision; /* The variable only lives inside this loop */
    printf("input value:");

    scanf("%d", &value);
    sum = sum + value;

    printf ("continue?");
    scanf("%d", &decision);
    if (0 == decision) {
        break;
    }
    order = order + 1;
}
通知
如果从1开始
order
,并且只输入一个值,
order
将增加到2,这将取消您的计算。从0开始或在决策确认后增加值。

您应该将
决策初始化为0

int decision = 0;
所以while循环是真的

while (decision == 0) {

在第一次迭代中。

您应该将
决策
初始化为0

int decision = 0;
所以while循环是真的

while (decision == 0) {

在第一次迭代中。

在C中,简单地声明一个变量并不会给它赋值
0
。你必须这么做。事实上,实际使用尚未初始化的变量是未定义的行为。很可能,变量包含分配给它的内存位置中的任何内容

解决方案是实际定义
决策

int decision = 0;

在C语言中,简单地声明一个变量并不会给它赋值
0
。你必须这么做。事实上,实际使用尚未初始化的变量是未定义的行为。很可能,变量包含分配给它的内存位置中的任何内容

解决方案是实际定义
决策

int decision = 0;

您尚未初始化
决策
变量,这就是错误的原因

int decision = 0;

您尚未初始化
决策
变量,这就是错误的原因

int decision = 0;


首先,
stdio.h
stdlib.h
不是库。它们是标准库中的头文件。好的,谢谢,我两周前才开始使用,我仍然很难发现错误,我真的不知道所有的错误terms@MicheleGalli-无需使用复制/粘贴回复来感谢所有人的回答。上面的工具提示“添加注释”
说“避免像“+1”或“谢谢”这样的注释。”,显然,我对该网站也是新手。首先
stdio.h
stdlib.h
不是库。它们是标准库的标题。好的,谢谢,我两周前刚刚开始,我仍然很难发现错误,我真的不知道所有的错误terms@MicheleGalli-使用复制/粘贴响应感谢每个人的答案是没有必要。上面的工具提示
addcomment
说“避免像“+1”或“谢谢”这样的评论。”是的,显然我对这个网站很陌生,但是我更喜欢带有
break
@KarolyHorvath的无限循环。不,我认为这是使用循环的好方法。如果可能,我总是尝试让我的循环具有有意义的退出条件
while(1)
不是很好的描述。@KarolyHorvath为什么会选择无限循环?你可以说这是一个品味问题(比如早期的
return
s),但是如果你对我的观点感兴趣,我更愿意保留该条件并在附近退出循环。在当前的解决方案中,您必须扫描代码以了解
decision
@KarolyHorvath会发生什么,我想这是一个品味问题,但是循环使用条件是有原因的。不使用它们是愚蠢的。但是更喜欢带有
中断的无限循环
@KarolyHorvath不,我认为这是使用循环的好方法。如果可能,我总是尝试让我的循环具有有意义的退出条件
while(1)
不是很好的描述。@KarolyHorvath为什么会选择无限循环?你可以说这是一个品味问题(比如早期的
return
s),但是如果你对我的观点感兴趣,我更愿意保留该条件并在附近退出循环。使用当前解决方案,您必须将代码扫描到