c - 如何在 C 中使用带有数组的 while 循环?

标签 c arrays

我正在尝试创建一个为用户获取 ISBN 编号的程序。 ISBN 的变量是一个数组,如果使用 ISBN 输入 0,则程序应该结束。但即使我输入 0 作为 ISBN 号,程序仍会继续运行:

#include <stdio.h>
int main(void) {
int isbnNumber[100];
int i = 1;

printf("ISBN number: ");
scanf("%d", &isbnNumber[0]);

while (isbnNumber[100] != 0) {

    printf("ISBN number: ");
    i++;
    scanf("%d", &isbnNumber[i]);


 }
}

最佳答案

代码 isbnNumber[100] 检查数组的第 101 个元素。仅当您在第 100 次迭代时输入 0 时,循环才会退出。

另外,应该注意的是,isbnNumber[100] 不是 isbnNumber 数组的元素。数组索引从零开始,因此 isbnNumber 中的最后一个元素是 isbnNumber[99]。访问超出数组末尾的元素是未定义的行为。如果您在第 100 次迭代时输入 0,这就是循环未退出的原因。

此外,您确实应该有一些东西来防止循环运行到数组末尾。下面介绍了如何运行循环,直到输入 0 或到达数组末尾为止。

for (int i = 0; i < 99; i++) {
    printf("ISBN number: ");
    scanf("%d", &isbnNumber[i]);
    if (isbnNumber[i] == 0)
        break;
}

关于c - 如何在 C 中使用带有数组的 while 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33600400/

相关文章:

arrays - []json.Rawmessage 是什么意思

c - C中bool和while(true)的区别

c - 迭代指针与字符数组

C 在 while 循环中 fork [不断检查某些东西并 fork 一个 child 并杀死另一个]

c - 如何在 C 语言的小端机器上比较两个 ipv6 地址

c - GetDiskFreeSpace 函数返回 ERROR_INVALID_FUNCTION

javascript - myArray.join(....).split(...) 打印

PHP 第二次循环遍历数组 (foreach)

c# - system.drawing.image 中的“System.OutOfMemoryException”

从其他方法传递数组时发生 Java 错误