C++ 修改此输出

c++ modify this output

本文关键字:输出 修改 C++      更新时间:2023-10-16
void print(int *xp, int len) {
 while (len--)
    cout << *xp++ << " ";  
cout << endl;
 }
int main(int argc, char** argv) {
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
for(int i=10; i>0 ; i--)
    print(array, i);
return 0;
}

它输出

   1 2 3 4 5 6 7 8 9 10
   1 2 3 4 5 6 7 8 9
   1 2 3 4 5 6 7 8
   1 2 3 4 5 6 7
   1 2 3 4 5 6
   1 2 3 4 5
   1 2 3 4
   1 2 3
   1 2
   1

单独修改 print() 以生成以下输出:

1 3 5 7 9
1 3 5 7 9
1 3 5 7
1 3 5 7
1 3 5
1 3 5
1 3
1 3
1
1

我试过这个,但它打印出所有 1

#include <iostream>
using namespace std;
void print(int *xp, int len) {
     while (len-- && *xp%2 != 0)
        cout << *xp << " ";
    cout << endl;
}
int main(int argc, char** argv) {
    int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    for(int i=10; i>0 ; i--)
        print(array, i);
        return 0;
    }

一旦while内的条件为假,它将停止打印。因此,在您修改后的代码中,当*xp是偶数时,它会停止整个循环。

您要做的是不对偶数执行 std::cout 语句(请注意指针也不会移动),或者每次跳转 2。请注意,这两种方法都存在一些微妙之处,并且像原始代码一样使用指针来实现目标将是不平凡的。

您没有更改 xp 的值,因此它始终打印数组的第一个元素。

您想从 i :0 -> len 开始计算索引并打印*(xp+i)

void print(int *xp, int len) {
 for(int i = 0; i<len;i++){
   if (i%2 == 0)
    cout << *(xp+i) << " ";  
 }
cout << endl;
 }