2011-04-14 58 views
0

可能重复:
Program not doing what it should - C也许问题与扫描号码 - ç

你好,

下面的程序只能读取输入的数字,当鲁尔房屋被侵犯别停下来,但1大问题是,它不会停止阅读数字,更糟的是,不要在屏幕上打印它应该如何。

代码:

#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++; 
     } 
    }  

} 

请帮我解决这个问题... 日Thnx。

+0

这不是以前的问题,尽管它几乎是相同的代码。 – Mat 2011-04-14 15:17:50

+0

'scanf(“%d”,&temp)'“有2个结果”。一个这样的“结果”是函数的返回值:1如果一切正常;否则为0或EOF。另一个“结果”(当返回1时)是变量temp的值(用户输入的值)。你需要检查“结果”...(如非常伪代码)if(scanf()== 1){if(temp == 0)...; }' – pmg 2011-04-14 15:38:47

回答

3

作为第一个提示,scanf返回读取的项目数,因此只有在读取48个项目(ASCII值为0)时才会触发条件(scanf("%d",&temp)) != '0'。这不会发生与格式说明符,所以这就是为什么你有循环。

+1

但我不想统计器官的数量,我需要它在'0'发生时停止... – 2011-04-14 15:21:03