你能解释一下为什么下面的程序会给出这样的输出吗?
#include<stdio.h>
int main()
{
int i=-3,j=1,k=0;
int m;
m=++i || ++j && ++k;
printf("i= %d\nj=%d\nk=%d\nm=%d", i,j,k,m);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
i= -2
j=1
k=0
m=1
我对std::eraseC++的功能感到困惑.
下面的代码在std::erase调用之前和之后获得相同的输出.但是如果在执行std::erase输出之后遍历列表,则不显示擦除的值.帮助我理解std::erase.
#include<bits/stdc++.h>
using namespace std;
int main()
{
list<int> v;
v.push_back(12);
v.push_back(10);
v.push_back(20);
list<int>::iterator it;
it = v.begin();
printf("%u %d\n", it, *it);
v.erase(it);
printf("%u %d\n", it, *it);
for(it= v.begin(); it!= v.end(); it++)
cout<< *it<<" ";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
"Memory address" 12
"Memory Address" 12
10 20
Run Code Online (Sandbox Code Playgroud) 如果条件块内部没有打印任何值。逻辑错误在哪里?谢谢。
#include<bits/stdc++.h>
using namespace std;
int fx[]= {-1,-1,-1,0,1,1,1,0};
int fy[]= {-1,0,1,1,1,0,-1,-1};
int ar[20][20];
int n;
int v1, v2;
void fun(int a, int b)
{
for(int i=0; i<8; i++)
{
v1 = a+fx[i];
v2 = b+fy[i];
//cout<<v1<<" "<<v2<<endl;
if(v1>=0 && v1<n)
{
if(v2>=0 && v2<n)
{
// Not executing
cout<<"----------"<<endl;
cout<<v1<<" "<<v2<<endl;
}
}
}
}
int main()
{
int n;
cin>> n;
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
cin>> ar[i][j];
}
fun(0,1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
样本输入:
4 …