⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 judge data.c

📁 本程序运用编译原理中语法分析的思想来判别一个数是什么类型的数
💻 C
字号:
#include<stdio.h>
#include<stdlib.h>

bool judge(char s[],int n)
{
	int i,j;
    for(j=1;j<n+1;j++)   /*首先扫描一遍,来确定是不是有小数点*/ 
		if(s[j]=='.')
			goto loopa;
	goto loopb;

loopa:               /*有小数点的情况*/
	if(s[0]=='-')    /*如果第一个字符是-号*/
	{
		for(i=1;i<n;i++)
		{
			if(s[i]=='0'||s[i]=='1'||s[i]=='.'&&i!=n)   /*如果是0、1、.则继续扫描*/
				continue;
			else if(s[i]>='2'&&s[i]<='7')  /*如果是2到7中任意一数,则说明一定不是二进制数,跳转*/
				goto loopa1;
			else if(s[i]>='8'&&s[i]<='9')   /*如果是8、9则说明一定不是二进制和八进制数,跳转*/
				goto loopa2;
			else if(s[i]>='A'&&s[i]<='F')   /*如果是A到F中任意字符,则说明一定不是二进制、八进制、十进制,跳转*/
				goto loopa3;
			else     /*如果其他情况则不是数*/
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]=='R')
			printf("文本文件中是个负二进制小数!\n");
		else if(s[n]=='O')
            printf("文本文件中是个负八进制小数!\n");
		else if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个负十进制小数!\n");
		else if(s[n]=='H')
            printf("文本文件中是个负十六进制小数!\n");
		else 
            printf("文本文件中不是数!\n");
	    return(1);
loopa1:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='7'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='8'&&s[i]<='9')
				goto loopa2;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopa3;
			else
			{
				printf("文本文件不是数!\n");
				return(0);
			}
		}
		if(s[n]=='O')
			printf("文本文件中是个负八进制小数!\n");
		else if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个负十进制小数!\n");
		else if(s[n]=='H')
            printf("文本文件中是个负十六进制小数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
loopa2:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='9'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopa3;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
        if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个负十进制小数!\n");
		else if(s[n]=='H')
            printf("文本文件中是个负十六进制小数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
loopa3:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='9'||s[i]>='A'&&s[i]<='F'||s[i]=='.'&&i!=n)
				continue;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]=='H')
			printf("文本文件中是个负十六进制小数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
	}

	if(s[0]=='+'||s[0]>='0'&&s[0]<='9'||s[0]>='A'&&s[0]<='F')
	{
		if(s[0]>='2'&&s[0]<='7')
		{
			i=1;
			goto loopa4;
		}
		if(s[0]>='8'&&s[0]<='9')
		{
			i=1;
			goto loopa5;
		}
		if(s[0]>='A'&&s[0]<='F')
		{
			i=1;
			goto loopa6;
		}
		for(i=1;i<n;i++)
		{
			if(s[i]=='0'||s[i]=='1'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='2'&&s[i]<='7')
				goto loopa4;
			else if(s[i]>='8'&&s[i]<='9')
				goto loopa5;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopa6;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]=='R')
			printf("文本文件中是个正二进制小数!\n");
		else if(s[n]=='O')
			printf("文本文件中是个正八进制小数!\n");
		else if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个正十进制小数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个正十六进制小数!\n");
		else 
            printf("文本文件中不是数!\n");
	    return(1);
loopa4:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='7'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='8'&&s[i]<='9')
				goto loopa5;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopa6;
			else
			{
				printf("文本文件不是数!\n");
				return(0);
			}
		}
		if(s[n]=='O')
			printf("文本文件中是个正八进制小数!\n");
		else if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个正十进制小数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个正十六进制小数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
loopa5:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='9'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopa6;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个正十进制小数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个正十六进制小数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
loopa6:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='9'||s[i]>='A'&&s[i]<='F'||s[i]=='.'&&i!=n)
				continue;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]=='H')
			printf("文本文件中是个正十六进制小数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
	}
	else 
	{
		printf("文本文件中不是数!\n");
		return(0);
	}


loopb:    /*无小数点*/
	if(s[0]=='-')
	{
		for(i=1;i<n+1;i++)
		{
			if(s[i]=='0'||s[i]=='1'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='2'&&s[i]<='7')
				goto loopb1;
			else if(s[i]>='8'&&s[i]<='9')
				goto loopb2;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopb3;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]=='R')
			printf("文本文件中是个负二进制整数!\n");
		else if(s[n]=='O')
			printf("文本文件中是个负八进制整数!\n");
		else if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个负十进制整数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个负十六进制整数!\n");
		else 
            printf("文本文件中不是数!\n");
	    return(1);
loopb1:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='7'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='8'&&s[i]<='9')
				goto loopb2;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopb3;
			else
			{
				printf("文本文件不是数!\n");
				return(0);
			}
		}
		if(s[n]=='O')
			printf("文本文件中是个负八进制整数!\n");
		else if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个负十进制整数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个负十六进制整数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
loopb2:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='9'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopb3;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个负十进制整数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个负十六进制整数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
loopb3:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='9'||s[i]>='A'&&s[i]<='F'||s[i]=='.'&&i!=n)
				continue;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]=='H')
			printf("文本文件中是个负十六进制整数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
	}

	if(s[0]=='+'||s[0]>='0'&&s[0]<='9'||s[0]>='A'&&s[0]<='F')
	{
		if(s[0]>='2'&&s[0]<='7')
		{
			i=1;
			goto loopb4;
		}
		if(s[0]>='8'&&s[0]<='9')
		{
			i=1;
			goto loopb5;
		}
		if(s[0]>='A'&&s[0]<='F')
		{
			i=1;
			goto loopb6;
		}
		for(i=1;i<n;i++)
		{
			if(s[i]=='0'||s[i]=='1'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='2'&&s[i]<='7')
				goto loopb4;
			else if(s[i]>='8'&&s[i]<='9')
				goto loopb5;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopb6;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]=='R')
			printf("文本文件中是个正二进制整数!\n");
		else if(s[n]=='O')
			printf("文本文件中是个正八进制整数!\n");
		else if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个正十进制整数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个正十六进制整数!\n");
		else 
            printf("文本文件中不是数!\n");
	    return(1);
loopb4:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='7'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='8'&&s[i]<='9')
				goto loopb5;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopb6;
			else
			{
				printf("文本文件不是数!\n");
				return(0);
			}
		}
		if(s[n]=='O')
			printf("文本文件中是个正八进制整数!\n");
		else if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个正十进制整数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个正十六进制整数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
loopb5:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='9'||s[i]=='.'&&i!=n)
				continue;
			else if(s[i]>='A'&&s[i]<='F')
				goto loopb6;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]>='0'&&s[n]<='9')
			printf("文本文件中是个正十进制整数!\n");
		else if(s[n]=='H')
			printf("文本文件中是个正十六进制整数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
loopb6:
		for(;i<n;i++)
		{
			if(s[i]>='0'&&s[i]<='9'||s[i]>='A'&&s[i]<='F'||s[i]=='.'&&i!=n)
				continue;
			else
			{
				printf("文本文件中不是数!\n");
				return(0);
			}
		}
		if(s[n]=='H')
			printf("文本文件中是个正十六进制整数!\n");
		else 
            printf("文本文件中不是数!\n");
		return(1);
	}
	else 
	{
		printf("文本文件中不是数!\n");
		return(0);
	}
}


void main()
{
	FILE *fp;
	int n=0;
	char s[50],ch;
    if((fp=fopen("string.txt","wt+"))==NULL)
	{
		printf("Cannot open file !!");
		getchar();
		exit(1);  /*有错误的关闭*/
	}
	ch=fgetc(fp);
	printf("请输入字符:\n");
	ch=getchar();
	while (ch!='\n')
	{
		fputc(ch,fp);  /*fputc函数有一个返回值,如写入成功则返回写入的字符, 否则返回一个EOF*/
		ch=getchar();
		n++;
	}
	rewind(fp);        /*使文件的位置指针重新返回文件的开头*/
	fgets(s,n+1,fp);
	fclose(fp); 
	printf("%s",s);
	printf("\n");
	n=n-1;
	judge(s,n);	
}

/*注:程序中二进制以R结尾;八进制以O结尾;十进制以0-9结尾;十六进制以H结尾*/
/*此程序可以判别数的正负、进制以及小数点*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -