使用for循环打印输出

时间:2014-02-10 21:08:20

标签: c for-loop

我的for循环似乎无法正常工作。第一个数字告诉我我希望程序执行多少任务n。当我输入1或2时,它可以工作,但当我输入3或更多时,它开始挣扎。每行有3个数字,用空格分隔,如代码所示。我没有得到所有输出。该程序中的算法工作完美,所以没有问题。 请忽略代码中的注释。对不起我的英语。

#include <stdio.h>
int n;
int i;
int s;
int d;
int p;
int k;
int A;
int x;
int r[];
int koniec;

main()
{
   scanf("%d", &n);
   while( !(n >= 1 && n <=1000) )
   {
      //printf ( "max 1000 uloh min 1 \n");
      return 1;//scanf("%d", &n);
   }
   for( i=1; i < n; i++)
   {
      scanf("%d %d %d", &s, &p, &d);
      while((s < 1) || (s > 15000) || (p < 1) || (p > 4000) || (d < 1) || (d > 15000)) {
         //printf ("prekroceny limit \n");
         return 1; // scanf("%d %d %d", &s, &p, &d);
      }

      k = s / d;
      A = s - ( k * d );

      if ( A == 0 )
      {    
         r[i] == 0;
      }
      else
      {
         //s = k * d + A ;
         x = ( A * p ) / d ;
         r[i] = p - x ;
      }

   }

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

   system("pause");
}

示例输入,以便您更好地理解:

4
5 4 4
6 100 3
500 5 1000
314 159 26

并输出:

3
0
3
147

编辑&gt;

5
3434 234 2345
14455 345 12
134 145 1345
9242 2455 13455
83 34 133

输出:

126
144
141
769
13

或更短的&gt;

输入:

2
15000 1 1
1 4000 1

输出:

0
0

我在两个例子中得到返回值

我的最终代码编辑:

#include <stdio.h>
#include <stdlib.h>

int n;
int i;
int s;
int d;
int p;
int k;
int A;
int x;
int *r;
int koniec;

main()
{
    scanf("%d", &n);
    while( !(n >= 1 && n <=1000) )
    {
        return 0;//printf ( "max 1000 uloh min 1 \n");
        //scanf("%d", &n);
    }

    r = (int *)malloc(n*sizeof(int));

    for(i=0; i < n; i++)
    {
        scanf("%d %d %d", &s, &p, &d);
        while((s < 1) || (s > 15000) || (p < 1) || (p > 4000) || (d < 1) || (d > 15000))
        {
            //printf ("prekroceny limit \n");
            return 0; //scanf("%d %d %d", &s, &p, &d);
        }

       k = s / d;
       A = s - ( k * d );

        if ( A == 0 )
        {    
            r[i] = 0;
        }
        else
        {
            //s = k * d + A ; 
            x = ( A * p ) / d ;
            r[i] = p - x ;
        }
    }

    for ( koniec = 0 ; koniec < n ; koniec++ )
    {
         printf ( "%d", r[koniec] ) ;
         printf ( "\n");
    } 

    free(r);

return 0;
}

2 个答案:

答案 0 :(得分:0)

r[]分配空间。
更改作业。
更改循环范围。

//int r[];
main() {
   scanf("%d", &n);

   // while( !(n >= 1 && n <=1000) )
   if (!(n >= 1 && n <=1000) )  {
      return 1;//scanf("%d", &n);
   }

   int r[n];  // allocate

   // for( i=1; i < n; i++)
   for( i=0; i < n; i++)  // Change range (@MrHappyAsthma)
     ...
     // r[i] == 0;   
     r[i] = 0;   //  change

     r[i] = p - x ;

   // for ( koniec = 0 ; koniec < i+1 ; koniec++ )
   for ( koniec = 0 ; koniec < n ; koniec++ )

答案 1 :(得分:0)

您需要使用malloc()动态分配内存。 (还有#include stdlib.h

例如,在第一个while循环后添加以下行:

//Note - at the top, change int r[] to the below: 
int *r; //Instead of int r[]
//End note

while( !(n >= 1 && n <=1000) )
{
     printf ( "max 1000 uloh min 1 \n");
     scanf("%d", &n);
}

r = (int *) malloc(n*sizeof(int)); //Allocate "n" integers to your 'array r'

还应该注意的是,一旦你完成使用数组r,你必须free()这样的内存如下:

free(r);

此外,还有一些其他编码问题:

  1. 请确保for( i=1; i < n; i++)符合您的要求。您使用“i”索引数组,但C中的数组从0开始。因此它(可能)应该读取for( i=0; i < n; i++)

  2. r[i] == 0;被错误地用作作业。使用单个=为变量赋值。使用双等于==来比较两个值。

  3. for ( koniec = 0 ; koniec < i+1 ; koniec++ )可能会出错。您的i将比其上方的for循环小n一个。因此,尝试迭代到i+1n将导致数组出界问题 - 也就是分段错误。

  4. 编辑 - 这应该符合您的要求:

    #include <stdio.h>
    #include <stdlib.h>
    
    int n;
    int i;
    int s;
    int d;
    int p;
    int k;
    int A;
    int x;
    int *r;
    int koniec;
    
    main()
    {
        scanf("%d", &n);
        while( !(n >= 1 && n <=1000) )
        {
            //printf ( "max 1000 uloh min 1 \n");
            //scanf("%d", &n);
            return 1; 
        }
    
        r = (int *)malloc(n*sizeof(int));
    
        for(i=0; i < n; i++)
        {
            scanf("%d %d %d", &s, &p, &d);
            while((s < 1) || (s > 15000) || (p < 1) || (p > 4000) || (d < 1) || (d > 15000))
            {
                //printf ("prekroceny limit \n");
                //scanf("%d %d %d", &s, &p, &d);
                return 1;
            }
    
           k = s / d;
           A = s - ( k * d );
    
            if ( A == 0 )
            {    
                r[i] = 0;
            }
            else
            {
                s = k * d + A ; //This line does nothing... Just so you know
                x = ( A * p ) / d ;
                r[i] = p - x ;
            }
        }
    
        for ( koniec = 0 ; koniec < n ; koniec++ )
        {
             printf ( "%d", r[koniec] ) ;
             printf ( "\n");
        } 
    
        free(r);
        system("pause");
        return 0;
    }
    

    输入:

    4
    5 4 4
    6 100 3
    500 5 1000
    314 159 26
    

    输出:

    3
    0
    3
    147