存疑201602(已解决)输出乱码

问题及代码https://paste.ubuntu.com/p/xhYcb4tvwN/
差以毫厘,谬以千里。
题目二:enum输出
enum是枚举( enumerate)的缩写,在C语言中是一种基本数据类型,它可以让数据更简洁,更易读。规定各项的值只能是int 壁变量,若未定义第一项的值,则默认第一项的值从0开始:若已定义某项的值,则从该项后值递增加一-
输人一行c语言的enum定义语句,且符合C语言语法.各项在大括号之间,并保证大括号之间无空格,要求输出各项的名称和对应的值,占一行,且名称与值之间有一个空格.保证输入的长度不超过 1000000个字符,且项至多为1000个,每个项的长度至多为1000个字符.
测试用例1:
输入:
enum BOOL.{truc,falsc};
输出:
true 0
false 1
测试用例2:
输入:
enum date{JAN=1,FEB.MAR,APR,MAY,JUN,JULY,AUG,SEP,OCT,NOV,DEC,MON=1,TUE,WED,THU,FRI,SAT,SUN,found-1949};输出:
JAN1
FEB2
MAR3
APR4
MAY5
JUN6
JULY7
AUG8
SEP9
OCT10
NOV11
DEC12
MONI
TUE2
WED3
THU4
FRI5
SAT6
SUN7
found1949

问题:输出很多=或空格,输出有问题
错误代码和正确代码对比:
1,for(i=i+1;s[i]!='}';i++){int i,len=strlen(s); for(i=i+1;i<len-2;i++){
2,while(s[i]!=','&&s[i]!='='){while(s[i]!=','&&s[i]!='='&&i<len-2){
3,

int temp=0;
while(s[i]!=','){
	printf("%c",s[i]);
	temp=temp*10+s[i]-'0';//记录值 
}
printf("\n");
cnt=temp++;//更新cnt 

少了判断条件和i++。以及输出和temp自增。

int temp=0;
i++;//跳过= 
while(s[i]!=','&&i<len-2){
	temp=temp*10+s[i]-'0';//记录值 
	i++;
}
printf("%d",temp);
printf("\n");
cnt=++temp;//更新cnt

问题代码:

#include<stdio.h>
int cnt=0;
void search(char s[]){
	int i;
	for(i=0;s[i]!='{';i++);//找到第一项 
	for(i=i+1;s[i]!='}';i++){
		while(s[i]!=','&&s[i]!='='){//先输出各项名称 
			printf("%c",s[i]);
			i++;
		}
		if(s[i]=='='){//有赋值,输出值 
			printf(" ");
			int temp=0;
			while(s[i]!=','){
				printf("%c",s[i]);
				temp=temp*10+s[i]-'0';//记录值 
			}
			printf("\n");
			cnt=temp++;//更新cnt 
		}else{//逗号跳出,则枚举 
			printf(" %d\n",cnt);
			cnt++;
		}
	}
}
int main(){
	char s[1000000];
	gets(s);
	search(s);
	return 0;
}

正确代码:

#include<stdio.h>
#include<string.h>
int cnt=0;
void search(char s[]){
	int i,len=strlen(s);
	for(i=0;s[i]!='{';i++);//找到第一项 
	for(i=i+1;i<len-2;i++){
		while(s[i]!=','&&s[i]!='='&&i<len-2){//先输出各项名称 
			printf("%c",s[i]);
			i++;
		}
		if(s[i]=='='){//有赋值,输出值 
			printf(" ");
			int temp=0;
			i++;//跳过= 
			while(s[i]!=','&&i<len-2){
				temp=temp*10+s[i]-'0';//记录值 
				i++;
			}
			printf("%d",temp);
			printf("\n");
			cnt=++temp;//更新cnt 
		}else{//逗号或}跳出,则枚举 
			printf(" %d\n",cnt);
			cnt++;
		}
	}
}
int main(){
	char s[1000000];
	gets(s);
	search(s);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值