我蒙了,关于循环的玄学问题
查看原帖
我蒙了,关于循环的玄学问题
432566
carefree_Zhuang楼主2022/8/19 18:50
#include<cstdio>
#include<map>
#include<vector>
#include<string>
#include<iostream>
using namespace std;

#define up(i,a,b) for(int i=(a);i<=(b);++i)
//宏定义

int n,m;
map<string,vector<int> >mp;

int main(){
	scanf("%d",&n);
	up(i,1,n){
		int l;
		scanf("%d",&l);
		up(j,1,l){
			string s;
			cin>>s;
			if(!mp[s].size()||mp[s][mp[s].size()-1]!=i)
				mp[s].push_back(i);
		}
	}
	scanf("%d",&m);
	up(i,1,m){
		string s;
		cin>>s;
//		for(int j=0;j<mp[s].size();++j)//AC
//      up(j,0,mp[s].size()-1)//本来想用
		for(int j=0;j<=mp[s].size()-1;++j)//改了,等价,不是define的问题
		{
			printf("%d\n",j);
			printf("%d\n",mp[s].size()-1);
			printf("%d\n",((j)<=(mp[s].size()-1)));
			printf("%d\n",0<=-1);
			printf("%d ",mp[s][j]);
		}
		puts("");
	}
	return 0;
}

问题在于m那个循环的第二层J,当mp[s].size()=0mp[s].size()=0时,使用标注AC的那行就不执行循环,使用下面的就会执行循环

四个printfprintf分别输出

0

-1

1

0

奇怪的不得了

2022/8/19 18:50
加载中...