我的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
147EDIT>
5
3434 234 2345
14455 345 12
134 145 1345
9242 2455 13455
83 34 133产出:
126
144
141
769
13或者shorter>什么的
投入:
2
15000 1 1
1 4000 1产出:
0
0在这两个示例中,Im都得到返回值1
我的最后代码编辑:
#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;
}发布于 2014-02-10 21:24:05
您需要使用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(r);此外,还有其他一些编码问题:
for( i=1; i < n; i++)是你想要的。使用"i“索引数组,但C中的数组从0开始。因此,它(很可能)应该是for( i=0; i < n; i++)。r[i] == 0;被错误地用作赋值。使用单个=为变量赋值。使用double等于==比较两个值。for ( koniec = 0 ; koniec < i+1 ; koniec++ )可能会通过一个错误。从上面的for循环来看,您的i将比n少一个。因此,试图迭代到i+1或n将导致数组越界问题-也就是分段错误。编辑--这应该能做你想做的事:
#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发布于 2014-02-10 21:19:56
为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++ )https://stackoverflow.com/questions/21687952
复制相似问题