函数题:输入十进制自然数(循环版)
请编写函数,以十进制形式输入自然数,模仿 scanf 函数使用 %u 格式限定符的功能。
#### 函数原型
c
int ScanDec(unsigned *x);
说明:参数 x 为指示整型变量的指针。函数将以十进制形式输入自然数,若输入正确,则将其保存至 x 所指示的整型变量中,函数值为 1 (真),否则不保存,函数值为 0 (假)。
要求:
- 允许输入前导空白字符(包括:空格、回车、换行、水平制表、垂直制表、换页等)。
- 自然数至少输入一位数字,否则视为错误。
- 遇到非法字符立即结束输入,并将该字符退回缓冲区,留给后面的输入函数读取。
#### 裁判程序
c
#include <stdio.h>
#include <ctype.h>
......
int ScanDec(unsigned *x);
int main()
{
unsigned x = 0;
char y;
if (ScanDec(&x))
{
printf("%u\n", x);
}
else
{
puts("Error!");
}
y = getchar();
printf("%c\n", y);
return 0;
}
......
/* 你提交的代码将被嵌在这里 */
提示:
- 作为练习,请自己编写函数。不要调用 C 库函数中的 scanf 函数。
- 利用前面的练习中所编写的 IsDigit 和 IsSpace 函数来判断十进制数字和空白字符。
- 利用 C 标准库中的 ungetc 函数将最近读取的字符退回缓冲区,留给后面输入。
#### 输入样例1
in
283A
#### 输出样例1
out
283
A
#### 输入样例2
in
283A
#### 输出样例2
out
283
A
#### 输入样例3
in
a
#### 输出样例3
out
Error!
a
关联习题:判断数字字符、判断空白字符。
答案:若无答案欢迎评论
#### 函数原型
c
int ScanDec(unsigned *x);
说明:参数 x 为指示整型变量的指针。函数将以十进制形式输入自然数,若输入正确,则将其保存至 x 所指示的整型变量中,函数值为 1 (真),否则不保存,函数值为 0 (假)。
要求:
- 允许输入前导空白字符(包括:空格、回车、换行、水平制表、垂直制表、换页等)。
- 自然数至少输入一位数字,否则视为错误。
- 遇到非法字符立即结束输入,并将该字符退回缓冲区,留给后面的输入函数读取。
#### 裁判程序
c
#include <stdio.h>
#include <ctype.h>
......
int ScanDec(unsigned *x);
int main()
{
unsigned x = 0;
char y;
if (ScanDec(&x))
{
printf("%u\n", x);
}
else
{
puts("Error!");
}
y = getchar();
printf("%c\n", y);
return 0;
}
......
/* 你提交的代码将被嵌在这里 */
提示:
- 作为练习,请自己编写函数。不要调用 C 库函数中的 scanf 函数。
- 利用前面的练习中所编写的 IsDigit 和 IsSpace 函数来判断十进制数字和空白字符。
- 利用 C 标准库中的 ungetc 函数将最近读取的字符退回缓冲区,留给后面输入。
#### 输入样例1
in
283A
#### 输出样例1
out
283
A
#### 输入样例2
in
283A
#### 输出样例2
out
283
A
#### 输入样例3
in
a
#### 输出样例3
out
Error!
a
关联习题:判断数字字符、判断空白字符。
答案:若无答案欢迎评论