c++ - 为什么我会在 'ideone' 中收到运行时错误,而相同的代码却可以在 Turbo C 等其他编译器上运行?

标签 c++ c

问题:你的程序是使用蛮力方法来找到生命、宇宙和一切的答案。更准确地说...重写小数字从输入到输出。读入数字42后停止处理输入。输入的所有数字都是一位或两位整数。 (因此我无法向 SPOJ 提交答案)

我的代码:

#include <stdio.h>
void main()
{
    int a[5],i,j;
    printf("Enter some numbers:");
    for(i=0;i<5;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==42)
        {
            j=i;
            break;
        }
    }
    for(i=0;i<j;i++)
    {
        printf("\n%d",a[i]);
    }
    return 0;
}

最佳答案

j 尚未在其定义位置进行初始化。如果您从未进入包含该行的 block ,它将继续处于未初始化状态

j = i;

在程序开始时将j初始化为5,以避免使用未初始化的值,从而导致未定义的行为。

您还可以更改最终循环以使用 j 作为循环计数器,使用 i 作为停止值。

for(i=0;i<5;i++)
{
   scanf("%d",&a[i]);
   if(a[i]==42)
   {
      ++i;
      break;
   }
}

for(j=0;j<i;j++)
{
   printf("\n%d",a[j]);
}

关于c++ - 为什么我会在 'ideone' 中收到运行时错误,而相同的代码却可以在 Turbo C 等其他编译器上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34274224/

相关文章:

c++ - 在类中声明对象时可能会导致此错误的原因是什么?

c - 使用列表进行堆栈操作

c - 关于警告 : "note: expected ' const int * *' but argument is of type ' int * *'"

c - C 中的嵌套结构访问

c++ - std::bind 在作为右值引用传递时丢失引用

C++ CSV 在引号内用逗号解析

c++ - QT 需要一个编译器设置来构建

无法找出C应用程序中的内存泄漏

c - strcat 时的未定义行为

c++ - 错误 : cannot call constructor