📄 program10_07.c
字号:
/* Program 10.7 Reading and unreading characters */
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
const size_t LENGTH = 50;
/* Function prototypes */
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];
printf("Enter a sequence of integers and alphabetic names:\n");
while(!isnewline())
if(getinteger(&number))
printf("\nInteger value:%8d", number);
else if(strlen(getname(name, LENGTH)) > 0)
printf("\nName: %s", name);
else
{
printf("\nInvalid input.");
return 1;
}
return 0;
}
/* Function to ignore spaces from standard input */
void eatspaces(void)
{
char ch = 0;
while(isspace(ch = getchar()));
ungetc(ch, stdin);
}
/* Function to read an integer from standard input */
bool getinteger(int *n)
{
eatspaces();
int value = 0;
int sign = 1;
char ch = 0;
/* Check first character */
if((ch=getchar()) == '-') /* should be minus */
sign = -1;
else if(isdigit(ch)) /* ...or a digit */
value = 10*value + (ch - '0');
else if(ch != '+') /* ...or plus */
{
ungetc(ch, stdin);
return false; /* Not an integer */
}
/* Find more digits */
while(isdigit(ch = getchar()))
value = 10*value + (ch - '0');
/* Push back first non-digit character */
ungetc(ch,stdin);
*n = value*sign;
return true;
}
/* Function to read an alphabetic name from input */
char *getname(char *name, size_t length)
{
eatspaces(); /* Remove leading spaces */
size_t count = 0;
char ch = 0;
while(isalpha(ch=getchar())) /* As long as there are letters */
{
name[count++] = ch; /* store them in name */
if(count == length-1)
break;
}
name[count] = '\0'; /* Append string terminator */
if(count < length-1)
ungetc(ch, stdin); /* Return non-letter to stream */
return name;
}
/* Function to check for newline */
bool isnewline(void)
{
char ch = 0;
if((ch = getchar()) == '\n')
return true;
ungetc(ch, stdin);
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -