在C程序中获取错误

时间:2017-06-13 07:09:52

标签: c

有人能找到问题吗?这是一个简单的C程序。它应该打印11,12,13,但它没有。为什么? 谢谢!

#include<stdio.h>
#include<conio.h>

void main()
{
    int no[4]={11,12,13,14}; /* An array containing 4 numbers */
    int num[4]; 
    int count=0;
    int p;
    int s=1; 
    char c='y';

    for(int j=0;j<=3;j++)
    {
       p=no[j];

       for(int n=s;n<=3;n++)
       {
         if(p!=no[n]) c='n'; /* If not equal*/
       }
       if(c=='n')
       {
         num[count]=p;
         s=s+1;
         count=count+1;
        }
     }
     printf("%d %d %d",num[2],num[1],num[3]);
     getche();
}

3 个答案:

答案 0 :(得分:0)

您的输出可能会被缓冲,并且只会在遇到换行符时输出到终端:c stdout print without new line?

fflush(stdout);之后拨打printf,或打印整行:

printf("%d %d %d\n",num[2],num[1],num[3]);

答案 1 :(得分:0)

我看到的主要问题是

    if(c=='n')
     {
         num[count]=p;
         s=s+1;
         count=count+1;
    }

块。您有条件地分配num[i]。如果不满足条件,您将访问包含不确定值的未初始​​化成员。这导致undefined behavior。您至少应该初始化具有自动存储的本地阵列。

Alo,还有一个问题,as already mentioned in @CKT's answer,您正在使用相同的变量j进行外部和内部循环控制。这里发生的是,对于外部循环的第一次迭代,内部循环执行并递增j,并且在完成内部循环的迭代之后,控件跳转到外部循环控制并且条件检查作为控件失败变量已被内循环增量语句改变。

因此,您的目标数组成员仍未初始化。为内循环和外循环使用单独的循环控制变量。

答案 2 :(得分:0)

在你的内部for循环中,你正在递增j,所以外部for循环只运行一次,你在num数组中得到垃圾值。

使用代码:

#include<stdio.h>
#include<conio.h>
void main()
{
    int no[4]={11,12,13,14}; /*An array containing 4 number*/
    int num[4]; int count=0;
    int p;int s=1; char c='y';
    for(int j=0;j<=3;j++)
    {
       p=no[j];

       for(int n=s; n<=3; n++)
       {
         if(p!=no[n]) c='n'; /* If not equal*/
        }
        if(c=='n')
        {
           num[count]=p;
           s=s+1;
           count=count+1;
        }
    }
    printf("%d %d %d",num[2],num[1],num[3]);
    getche();
}

另外,对于打印第四个号码,请使用

 printf("%d %d %d %d",num[2],num[1],num[3], num[0]);