如何获取数字序列然后打印最后 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
我正在尝试制作一个程序,从用户那里获取以 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