蒟蒻求助:为什么输入用cin可以AC,用scanf就会WA和RE。
查看原帖
蒟蒻求助:为什么输入用cin可以AC,用scanf就会WA和RE。
542818
L2994587066楼主2021/9/16 15:26

用scanf就会WA和RE

#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main () {
	int fw=1,cw=1,fx,fy,cx,cy,m[15][15],min=0,tdz;//f开头代表农夫,c开头代表牛 ,w代表方向 
	char map[15][15];
	bool exit[211115];
	for (int i=0;i<211115;i++) exit[i]=0; //初始化 
	for (int i=0;i<=12;i++){//边框设障碍 
		m[0][i]=0;
		m[12][i]=0;
		m[i][0]=0;
		m[i][12]=0;
	} 
	for (int i=1;i<=10;i++){
		if (i>1) getchar();//吃掉回车键 
		for (int j=1;j<=10;j++){
			//cin>>map[j][i];
			scanf ("%c",&map[j][i]);
			switch (map[j][i]){
				case '*':m[j][i]=0;break;//0为障碍物 
				case '.':m[j][i]=1;break; //1为空地 
				case 'F':m[j][i]=1;fx=j,fy=i;break; 
				case 'C':m[j][i]=1;cx=j,cy=i;break;
			}
			//printf ("\n");
			//printf ("%d %d\n",i,j);
		}
	}
	while ((fx==cx&&fy==cy)==0){
		int fx1=fx,fy1=fy,cx1=cx,cy1=cy;
		switch (fw){
			case 1:fy1--;break;//1向上 
			case 2:fx1++;break;//2向右 
			case 3:fy1++;break;//3向下 
			case 4:fx1--;break;//4向左 
		}
		if (m[fx1][fy1]==1) fx=fx1,fy=fy1;//不是障碍就移动 
		else {
			if (fw<4) fw++;//是障碍转弯 
			else fw=1;
		}
		switch (cw){
			case 1:cy1--;break;
			case 2:cx1++;break;
			case 3:cy1++;break;
			case 4:cx1--;break;
		}
		if (m[cx1][cy1]==1) cx=cx1,cy=cy1;
		else {
			if (cw<4) cw++;
			else cw=1;
		}
		tdz=fx+fy*10+cx*100+cy*1000+fw*10000+cw*40000;//借鉴题解中的特定值 
		//printf("%d %d %d %d %d %d\n",fx,fy,fw,cx,cy,cw);
		//printf("%d %d\n",tdz,exit[tdz]) ;
		if (exit[tdz]==1){
			printf ("0");
			return 0;
		} 
		exit[tdz]=1;
		//printf("%d\n",exit[tdz]) ;
		min++;
	}	
	
	printf ("%d",min);
	
	return 0;
} 

用cin就是AC

#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int main () {
	int fw=1,cw=1,fx,fy,cx,cy,m[15][15],min=0,tdz;//f开头代表农夫,c开头代表牛 ,w代表方向 
	char map[15][15];
	bool exit[211115];
	for (int i=0;i<211115;i++) exit[i]=0; //初始化 
	for (int i=0;i<=12;i++){//边框设障碍 
		m[0][i]=0;
		m[12][i]=0;
		m[i][0]=0;
		m[i][12]=0;
	} 
	for (int i=1;i<=10;i++){
		//if (i>1) getchar();//吃掉回车键 
		for (int j=1;j<=10;j++){
			cin>>map[j][i];
			//scanf ("%c",&map[j][i]);
			switch (map[j][i]){
				case '*':m[j][i]=0;break;//0为障碍物 
				case '.':m[j][i]=1;break; //1为空地 
				case 'F':m[j][i]=1;fx=j,fy=i;break; 
				case 'C':m[j][i]=1;cx=j,cy=i;break;
			}
			//printf ("\n");
			//printf ("%d %d\n",i,j);
		}
	}
	while ((fx==cx&&fy==cy)==0){
		int fx1=fx,fy1=fy,cx1=cx,cy1=cy;
		switch (fw){
			case 1:fy1--;break;//1向上 
			case 2:fx1++;break;//2向右 
			case 3:fy1++;break;//3向下 
			case 4:fx1--;break;//4向左 
		}
		if (m[fx1][fy1]==1) fx=fx1,fy=fy1;//不是障碍就移动 
		else {
			if (fw<4) fw++;//是障碍转弯 
			else fw=1;
		}
		switch (cw){
			case 1:cy1--;break;
			case 2:cx1++;break;
			case 3:cy1++;break;
			case 4:cx1--;break;
		}
		if (m[cx1][cy1]==1) cx=cx1,cy=cy1;
		else {
			if (cw<4) cw++;
			else cw=1;
		}
		tdz=fx+fy*10+cx*100+cy*1000+fw*10000+cw*40000;//借鉴题解中的特定值 
		//printf("%d %d %d %d %d %d\n",fx,fy,fw,cx,cy,cw);
		//printf("%d %d\n",tdz,exit[tdz]) ;
		if (exit[tdz]==1){
			printf ("0");
			return 0;
		} 
		exit[tdz]=1;
		//printf("%d\n",exit[tdz]) ;
		min++;
	}	
	
	printf ("%d",min);
	
	return 0;
} 

两个代码只有输入部分不同。 到底是为什么啊啊啊啊啊啊啊!!! 孩子快疯了。

2021/9/16 15:26
加载中...