#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#include<string.h>
#define LENGTH 50
void eatspaces(void);
bool getinteger(int *n);
char *getname(char *name,size_t length);
bool isnewline(void);
int main(void)
{
int number;
char name[LENGTH]={'\0'};
printf("enter a sequence of integers and alphabetic names in a single line:\n");
while(!isnewline())//输入字符,用isnewline函数判断是否结束字符,不是就返回字符到输入流
if(getinteger(&number))//取读数字,把不是数字部分的字符返回输入流
printf("integer value:%8d\n",number);
else if(strnlen_s(getname(name,LENGTH),LENGTH)>0)//取读字母,把非字母部分的字符返回输入流
printf("Name:%s\n",name);
else
{
printf("Invalid input.\n");
return 1;
}
}
return 0;
}
void eatspaces(void)//去空格符,水平制表符等
{
char ch=0;
while(isspace(ch=(char)getchar()));
ungetc(ch,stdin);
}
bool getinteger(int*n)//判断是否为数字,然后根据正负加符号
{
eatspaces();
int value=0;
int sign=1;
char ch=0;
if((ch=(char)getchar())=='-')
sign=-1;
else if(isdigit(ch))
value=ch-'0';
else if(ch!='+')
{
ungetc(ch,stdin);
return false;
}
while(isdigit(ch=(char)getchar()))
value=10*value+(ch-'0');
ungetc(ch,stdin);
*n=value*sign;
return true;
}
char*getname(char*name,size_t length)//储存字母,返回字母
{
eatspaces();
size_t count=0;
char ch=0;
while(isalpha(ch=(char)getchar()))
{
name[count++]=ch;
if(count==length-1)
break;
}
if(count<length-1)
ungetc(ch,stdin);
return name;
}
bool isnewline(void)//判断是否为结束字符,
{
char ch=0;
if((ch=(char)getchar())=='\n')
return true;
ungetc(ch,stdin);
return false;
}
新知
最新推荐文章于 2022-12-12 17:27:26 发布