为何用scanf的版本就全WA, 用cin的版本就AC了
查看原帖
为何用scanf的版本就全WA, 用cin的版本就AC了
271534
DonoToT楼主2020/9/11 22:21
#include<cstdio>
int main(void)
{
	int n;
	char x;
	int lie = 0;
	int b[40000];
	
	int flag = 0;
	int zero = 0;
	int one = 0;
	int k=1;
	for(int i=1; i<=300; i++)
	{
		for(int j=1; j<=300; j++)
		{
			scanf("%c", &x);
			if(!flag)
			{
				if(x=='0')
				{
					zero ++;
				}
				else if(x=='1')
				{
					b[k++] = zero;
					one ++;
					zero = 0;
					flag = !flag;
				}
			}
			else
			{
				if(x=='1')
				{
					one ++;
				}
				else if(x=='0')
				{
					b[k++] = one;
					zero ++;
					one = 0;
					flag = !flag;
				}
			}
			if(x=='\n')
			{
				lie = j-1;
				break;
			}
		}
		if(i==lie)
		{
			if(!flag)
			{
				b[k] = zero;
			}
			else
			{
				b[k] = one;
			}
			break;
		}
	}
	
	printf("%d", lie);
	for(int i=1; i<=k; i++)
	{
		printf(" %d", b[i]);
	}
	
	
	
	return 0;
}

上面是scanf的版本

...

下面是cin的版本

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main(void)
{
	int n;
	char x;
	char a[210][210];
	int lie = 0;
	int b[40000];
	
	int flag = 0;
	int zero = 0;
	int one = 0;
	int k=1;
	
	cin >> a[1]+1;
	for(int i=2; i<=strlen(a[1]+1); i++)
	{
		cin >> a[i] + 1;
	}
	for(int i=1; i<=300; i++)
	{
		for(int j=1; j<=300; j++)
		{
			if(!flag)
			{
				if(a[i][j]=='0')
				{
					zero ++;
				}
				else if(a[i][j]=='1')
				{
					b[k++] = zero;
					one ++;
					zero = 0;
					flag = !flag;
				}
			}
			else
			{
				if(a[i][j]=='1')
				{
					one ++;
				}
				else if(a[i][j]=='0')
				{
					b[k++] = one;
					zero ++;
					one = 0;
					flag = !flag;
				}
			}
			if(a[i][j]!='0' && a[i][j]!='1')
			{
				lie = j-1;
				break;
			}
		}
		if(i==lie)
		{
			if(!flag)
			{
				b[k] = zero;
			}
			else
			{
				b[k] = one;
			}
			break;
		}
	}
	
	printf("%d", lie);
	for(int i=1; i<=k; i++)
	{
		printf(" %d", b[i]);
	}
	
	
	
	return 0;
}

在本机上都过了, 但是洛谷上测评是时候为什么scanf的版本要么说我在第一个位置输出了1, 要么输出了0, 求大佬解答这是什么原因

2020/9/11 22:21
加载中...