以相反的顺序打印整数数组这是一个相当简单的问题。虽然每当我尝试打印时,它最终都会显示垃圾值。以下是我的计划。
#include <stdio.h>
#include <conio.h>
int main()
{
int temp = { '\0' };
int num[9];
int i;
int j = 8;
printf("Enter 8 numbers\n");
for (i = 0; i < 8; i++)
{
scanf_s("%d", &num[i], 1);
}
for (i = 0; i <= j; i++, j--)
{
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
printf("\nThe numbers in reverse are\n");
for (i = 0; i <=8; i++)
{
printf("%d\n", num[i]);
}
_getch();
return 0;
}
假设我输入的数字从1到8,它会反向打印数字,但它打印的第一个值是垃圾值。我知道我可以使用和If语句来对抗这种情况,但有没有办法在不使用if的情况下解决这个问题?
答案 0 :(得分:6)
你在这里犯了两个错误:
j
设置为7
以解决此问题。 <
或!=
,而不是<=
以避免出现一个错误。你的第一个循环正确,但最后一个循环被破坏了。此外,您可能希望将数组的大小减小到8,因为第9个元素未使用。
答案 1 :(得分:4)
如果要反向打印数组中的整数,只需从最后一个索引处开始,然后再进行操作。
第三个循环应该更像这样:
int j = 7; // an array of size 8 starts at the 0th and ends at the 7th index.
while(j >= 0)
{
printf("%d", num[j]);
j--;
}
答案 2 :(得分:2)
您的计划中存在多种逻辑不一致,
您将数组定义为包含9个元素
int num[9];
但只输入8个元素
for (i = 0; i < 8; i++)
{
scanf_s("%d", &num[i], 1);
}
因此,未初始化具有insex 8的数组的最后一个元素。然而,在交换数组元素的循环中,您可以访问此未初始化元素
int j = 8;
//...
for (i = 0; i <= j; i++, j--)
{
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
也无需使用函数scanf_s
代替scanf
考虑到以相反的顺序输出数组,你不需要交换它的元素。
以相反顺序输出数组而不交换其元素的程序可以采用以下方式
#include <stdio.h>
#include <conio.h>
#define N 9
int main( void )
{
int num[N];
int i;
printf( "Enter %d numbers\n", N );
i = 0;
while ( i < N && scanf( "%d", &num[i] ) == 1 ) i++;
printf( "\nThe numbers in reverse are\n" );
while ( i-- ) printf( "%d ", num[i] );
printf( "\n" );
_getch();
return 0;
}
如果要输入数字序列
1 2 3 4 5 6 7 8 9
然后输出看起来像
9 8 7 6 5 4 3 2 1
如果要交换数组的元素,那么程序可能看起来像
#include <stdio.h>
#include <conio.h>
#define N 9
int main( void )
{
int num[N];
int n;
int i;
printf( "Enter %d numbers\n", N );
n = 0;
while ( n < N && scanf( "%d", &num[n] ) == 1 ) n++;
for ( i = 0; i < n / 2; i++ )
{
int tmp = num[i];
num[i] = num[n - i - 1];
num[n - i - 1] = tmp;
}
printf( "\nThe numbers in reverse are\n" );
for ( i = 0; i < n; i++ ) printf( "%d ", num[i] );
printf( "\n" );
_getch();
return 0;
}
如果输入与上面相同,那么输出将是
9 8 7 6 5 4 3 2 1
答案 3 :(得分:2)
您还可以使for
循环保持不变并更改索引
#define ARRAY_SIZE 8
// print in reverse order
for (i = 0; i < ARRAY_SIZE; i++)
{
printf("%d\n", num[ARRAY_SIZE - i - 1]);
}
当您需要不同的数组大小时,我使用了#define
来更轻松地更改程序:只需在一个地方而不是当前需要的地方进行更改。