Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
扫描数字可能有问题-C_C - Fatal编程技术网

扫描数字可能有问题-C

扫描数字可能有问题-C,c,C,可能重复: 你好, 下面的程序只从输入中读取数字,并在违反rull时停止,但最大的问题是它不会停止读取数字,更糟糕的是,它不会在屏幕上打印它应该打印的内容 守则: #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

可能重复:

你好,

下面的程序只从输入中读取数字,并在违反rull时停止,但最大的问题是它不会停止读取数字,更糟糕的是,它不会在屏幕上打印它应该打印的内容

守则:

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

}
#包括
#包括
无效筛选(整数x_arr[],整数y_arr[]);
int main()
{
int x[20]={0},y[20]={0};
int m=0,temp=0,curr=0,i=0,j=0;
printf(“请立即输入您的号码:\n\n”);
/*逐个输入数字。如果x[i+1]值=电流)
{
x[i]=温度;
电流=温度;
i++;
}
其他的
{
printf(“数字顺序不正确!\n\n程序现在将终止…\n\n”);
}
}
筛选(x,y);
对于(i=0;y[i]='0';i++)/*strlen(y),不包括('0')*/
m++;
/*打印m,y的器官*/
printf(“\n\nm=%d”,m);
printf(“Y=”);
而(y[j]!='0')
{
printf(“%d,”,y[j]);
j++;
}
返回0;
}
无效筛选(整数x_arr[],整数y_arr[]
{
int i=0,j=0;
而(x_arr[i]!='0')
{
如果(x_arr[i]==x_arr[i+1])/*如果当前值等于下一个值->在x_arr处跳转dbl*/
{
y_arr[j]=x_arr[i];
i+=2;
j++;
}
其他的
{
y_arr[j]=x_arr[i];
i++;
j++;
}
}    
}
请帮我解决这个问题。。。
thnx.

作为第一个提示,
scanf
返回读取的项目数,因此条件
(scanf(“%d”,&temp))!='0'
仅当您读取48项(ASCII值为0)时才会被命中。格式说明符不会出现这种情况,所以这就是为什么会出现循环。

作为第一个提示,
scanf
返回读取的项数,因此条件
(scanf(“%d”,&temp))!='0'
仅当您读取48项(ASCII值为0)时才会被命中。这种情况不会发生在格式说明符上,这就是为什么会出现循环。

这与前面的问题不同,尽管它的代码几乎相同。
scanf(“%d”,&temp)
“有两个结果”。其中一个“结果”是函数的返回值:1如果一切正常;否则为0或EOF。另一个“结果”(返回1时)是变量
temp
中的值(用户输入的值)。你需要检查两个“结果”。。。正如在(非常伪的代码)
if(scanf()==1){if(temp==0)…;}
中一样,这与前面的问题不同,尽管它几乎是相同的代码。
scanf(“%d”,&temp)
“有两个结果”。其中一个“结果”是函数的返回值:1如果一切正常;否则为0或EOF。另一个“结果”(返回1时)是变量
temp
中的值(用户输入的值)。你需要检查两个“结果”。。。如(非常伪代码)
if(scanf()==1){if(temp==0)…;}
但我不想计算器官的数量,我需要它在“0”出现时停止…但我不想计算器官的数量,我需要它在“0”出现时停止。。。