执行错误-程序停止工作(C)

执行错误-程序停止工作(C),c,C,我需要编写一个简单的程序,从文件中读取数字,然后将这些数字存储在数组中。文件中的最后一个数字是0,因此程序知道何时读取 当我执行程序时,DEC C++崩溃。我上网寻求解决方案,并相应地更改了设置,但这不起作用。我运行了我的其他程序,它运行得很好,这让我觉得代码有问题 有什么想法吗 #include <stdio.h> int main(){ int i, j=0, k; int values[20]; FILE*ptr; ptr = fopen(

我需要编写一个简单的程序,从文件中读取数字,然后将这些数字存储在数组中。文件中的最后一个数字是0,因此程序知道何时读取

当我执行程序时,DEC C++崩溃。我上网寻求解决方案,并相应地更改了设置,但这不起作用。我运行了我的其他程序,它运行得很好,这让我觉得代码有问题

有什么想法吗

#include <stdio.h>

int main(){

    int i, j=0, k;
    int values[20];
    FILE*ptr;

    ptr = fopen("input.txt", "r");
    fscanf(ptr, "%d", &i);
    while (i=!0){
        values[j]=i;
        j++;
        fscanf(ptr, "%d", &i);
    }

    for (k=0; k<20; k++)
        printf("%d\n", values[k]);

    fclose (ptr);

    return 0;   
}
#包括
int main(){
int i,j=0,k;
int值[20];
文件*ptr;
ptr=fopen(“input.txt”,“r”);
fscanf(ptr、%d、&i);
while(i=!0){
数值[j]=i;
j++;
fscanf(ptr、%d、&i);
}
对于(k=0;k另一个打字错误:

while (i=!0){
应该是:

while (i != 0){
您的代码将
!0
赋值给
i
,而不是将
i
0
进行比较
!0
1
,因此您有一个无限循环,并且您的写入超出了数组的边界


还请注意,如果文件中的数字超过20个,您将在数组外写入。如果文件中的数字少于20个,则打印
值[k]
的循环将读取未初始化的数组项。

代码有两个问题:

  • 打开input.txt后,您没有检查错误
  • 虽然i=!0在语法上是正确的,但它可能不符合您的要求!0是1,因此它与i=1相同,您将值1放入i中
要帮助您进行调试,请执行以下操作:

  • 向代码中添加printf()语句,以验证是否达到某一行并检查变量的值
  • 学习使用调试器

什么是“DEC++”?这是C++,不是C++。第一个<代码> fSCANF在 > 之前丢失了<代码>和代码>。我道歉,“DeV C++”。它是程序I的名称。use@Arc676直到他编辑后删除了那个打字错误。你确定文件中的数字不超过20个吗?