Probably problem with scanning numbers - C [duplicate]
Possible Duplicate:
Program not doing what it should - C
Hello,
Following program only read numbers from input and do stop when rull is violated, but 1 big problem is that it doesn't stop reading numbers and worse, don't print on screen what it should.
The code:
#include <stdio.h>
#include <string.h>
void SIFT(int x_arr[ ], int y_arr[]);
int main ()
{
int x[20] = {0} , y[20] = {0};
int m=0,temp=0,curr=0,i=0,j=0;
printf("Please enter your numbers now:\n\n");
/*enter numbers one by one. if x[i+1] value < x[i] value, err msg.
when user want to end the series he must enter '0' which means end of string (it wont included in x[]) */
while ( (scanf("%d",&temp) ) != '0' )
{
if (temp >= curr)
开发者_开发知识库 {
x[i] = temp;
curr = temp;
i++;
}
else
{
printf("The numbers are not at the right order !\n\nProgram will now terminate...\n\n");
}
}
SIFT(x,y);
for (i=0 ; y[i]=='0' ; i++) /*strlen(y) without ('0')'s includes*/
m++;
/*Prints m , y's organs*/
printf("\n\nm = %d",m);
printf("Y = ");
while (y[j]!='0')
{
printf ("%d ,",y[j]);
j++;
}
return 0;
}
void SIFT(int x_arr[ ], int y_arr[])
{
int i=0,j=0;
while (x_arr[i] != '0')
{
if (x_arr[i] == x_arr[i+1]) /*if current val. equals next val. -> jump dbl at x_arr*/
{
y_arr[j] = x_arr[i];
i+=2;
j++;
}
else
{
y_arr[j]=x_arr[i];
i++;
j++;
}
}
}
Please help me solve this problem... thnx.
As a first hint, scanf
returns the number of items read, so the condition (scanf("%d",&temp) ) != '0'
will only be hit if you read 48 items (the ASCII value of 0). This isn't going to happen with that format specifier so that's why you've got the loop.
精彩评论