首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for循环输出输出

使用for循环输出输出
EN

Stack Overflow用户
提问于 2014-02-10 21:08:20
回答 2查看 271关注 0票数 0

我的for循环似乎不能正常工作。第一个数字,它告诉我要我的程序做多少任务是n。当我输入1或2,它起作用,但当我输入3和更多时,它开始挣扎。如您在代码中所看到的,每一行都有3个数字,用空格分隔。我没有得到所有的输出。这个程序中的算法工作得很完美,所以没有问题。请忽略代码中的注释。为我的英语道歉。

代码语言:javascript
复制
#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");
}

通过示例输入,您可以更好地理解:

代码语言:javascript
复制
4
5 4 4
6 100 3
500 5 1000
314 159 26

和产出:

代码语言:javascript
复制
3
0
3
147

EDIT>

代码语言:javascript
复制
5
3434 234 2345
14455 345 12
134 145 1345
9242 2455 13455
83 34 133

产出:

代码语言:javascript
复制
126
144
141
769
13

或者shorter>什么的

投入:

代码语言:javascript
复制
2
15000 1 1
1 4000 1

产出:

代码语言:javascript
复制
0
0

在这两个示例中,Im都得到返回值1

我的最后代码编辑:

代码语言:javascript
复制
#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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-10 21:24:05

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

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

代码语言:javascript
复制
//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,您必须像这样免费()这个内存:

代码语言:javascript
复制
free(r);

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

  1. 确保for( i=1; i < n; i++)是你想要的。使用"i“索引数组,但C中的数组从0开始。因此,它(很可能)应该是for( i=0; i < n; i++)
  2. r[i] == 0;被错误地用作赋值。使用单个=为变量赋值。使用double等于==比较两个值。
  3. for ( koniec = 0 ; koniec < i+1 ; koniec++ )可能会通过一个错误。从上面的for循环来看,您的i将比n少一个。因此,试图迭代到i+1n将导致数组越界问题-也就是分段错误。

编辑--这应该能做你想做的事:

代码语言:javascript
复制
#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;
}

输入:

代码语言:javascript
复制
4
5 4 4
6 100 3
500 5 1000
314 159 26

输出:

代码语言:javascript
复制
3
0
3
147
票数 0
EN

Stack Overflow用户

发布于 2014-02-10 21:19:56

r[]分配空间。

改变任务。

循环范围的变化。

代码语言:javascript
复制
//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++ )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21687952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档