开发者

Probably problem with scanning numbers - C [duplicate]

开发者 https://www.devze.com 2023-02-25 01:24 出处:网络
This question already has answers here: Closed 11 years ago. Possible Duplicate: Program not doing what it should - C
This question already has answers here: Closed 11 years ago.

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号