如何获取数字序列然后打印最后 5 个?

How to get sequence of numbers and then print the last 5?

我正在尝试制作一个程序,从用户那里获取以 0 结尾的序列,然后我想打印最后 5 个数字(不包括 0)。

我可以假设用户将在一行中输入所有数字并以 0 结尾。

我写了那个代码,但它有问题,我认为它与 scanf 行有关。

输入:

1 6 9 5 2 1 4 3 0

输出:无输出

#include <stdio.h>
#define N 5

int main()
{
    int arr[N] = {0};
    int last_input, j;
    
    printf("please enter more than %d number and than enter 0: \n", N);
    
    last_input = 0;
    while (last_input<N) {
       scanf(" %d", &j);
       if (j == '0') {
          last_input = N;
          break;
       }
       else {
          arr[last_input] = j;
       }
       if (last_input==(N-1)) {
          last_input=-1;
       }
       ++last_input;
   }
    
    
    printf("The last %d numbers u entered are:\n", N); 
    
    for (j=(last_input+1); j<N; ++j) {
       printf(" %d", arr[j]);    
    }

    for (j=0; j<last_input; ++j) {
       printf(" %d", arr[j]);  
    }

    return 0;
}

我根据您的意见做了一些修改,现在一切正常!

#include <stdio.h>
#define N 5

int main()
{
    int arr[N] = {0};
    int last_input, j;
    
    printf("please enter more than %d number and than enter 0: \n", N);
    
    last_input = 0;
    while (last_input<N) {
       scanf("%d", &j);
       if (j == 0) {
          break;
       }
       else {
          arr[last_input] = j;
       }
       if (last_input==(N-1)) {
          last_input=-1;
       }
       ++last_input;
   }
    
    
    printf("The last %d numbers u entered are:\n", N); 
    
    for (j=(last_input); j<N; ++j) {
       printf("%d ", arr[j]);    
    }

    for (j=0; j<last_input; ++j) {
       printf("%d ", arr[j]);  
    }

    return 0;
}

谢谢你们 <3.

这个对比

if (j == '0') {

没有意义,因为用户将尝试输入整数值 0 而不是字符“0”的值(例如 ASCII 30h 或 EBCDIC F0h)。

你至少需要写

if (j == 0) {

由于这些 sub-statements 的 if 语句

  last_input = N;
  break;

这个for循环

for (j=(last_input+1); j<N; ++j) {
   printf(" %d", arr[j]);    
}

从未执行过,没有任何意义。

此声明

last_input=-1;

导致其输出中最后 N 个元素的顺序被打乱。而且变量 last_input 的结果值将不正确。

您需要将数组元素向左移动一位。为此,您可以使用标准 C 函数 memmove 的循环。

程序可以如下所示。

#include <stdio.h>
#include <string.h>


int main( void ) 
{
    enum { N = 5 };
    int arr[N];

    printf( "Please enter at least not less than %d numbers (0 - stop): ", N );

    size_t count = 0;

    for (int num; scanf( "%d", &num ) == 1 && num != 0; )
    {
        if (count != N)
        {
            arr[count++] = num;
        }
        else
        {
            memmove( arr, arr + 1, ( N - 1 ) * sizeof( int ) );
            arr[N - 1] = num;
        }
    }

    if (count != 0)
    {
        printf( "The last %zu numbers u entered are: ", count );
        for (size_t i = 0; i < count; i++)
        {
            printf( "%d ", arr[i] );
        }
        putchar( '\n' );
    }
    else
    {
        puts( "There are no entered numbers." );
    }
}

程序输出可能看起来像

Please enter at least not less than 5 numbers (0 - stop): 1 2 3 4 5 6 7 8 9 0
The last 5 numbers u entered are: 5 6 7 8 9