| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1333 人关注过本帖
标题:请问,数字字符转换为数字存储,如何检测超出位数
只看楼主 加入收藏
bxe
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2019-3-21
结帖率:72.22%
收藏
 问题点数:0 回复次数:2 
请问,数字字符转换为数字存储,如何检测超出位数
程序代码:
/* Program 10.7 Reading and unreading characters */
#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>

const size_t 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];
    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 check for newline
bool isnewline(void) //检测回车
{
    char ch = 0;
    if((ch = getchar()) == '\n')
       return true;//结束while()

    ungetc(ch, stdin);
    return false;
}
// Function to ignore spaces from standard input
void eatspaces(void) //略过空格
{
    char ch = 0;
    while(isspace(ch = getchar()));/*变元是空格或制表符 返回true*/
    //                 返回值是int
    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;
    if((ch=getchar()) == '-')
        sign = -1;
    else if(isdigit(ch))//检测十进制数字字符
        value = 10*value + (ch - '0');//如何检测超出int 上限
    else if(ch != '+')
    {
        ungetc(ch, stdin);
        return false;
    }

    while(isdigit(ch = 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=getchar()))//确认字符为英文字母
    {
        name[count++] = ch;
        if(count == length-1)
            break;
    }

    name[count] = '\0';
    if(count < length-1)
        ungetc(ch, stdin);//这是在预防什么?
    return name;
}
//12                          Jack Jim 234 Jo Janet 99 88
书中的例子
请问
1,数字字符转换为数字存储,如何检测超出位数?(第二个bool函数)
2,最后一个函数的最后一个if()是怎样的逻辑?
3,如果存储的数值,超过变量类型的极限值,那么之后变量的状态是什么样?是存储了极限值,还是丢失了某一位呢?
4,如果只输入回车,程序就会结束,这也不是预期结果(个人理解逻辑为while(!true);else if(0>0);else if return1 才对啊)
 而且如果输入了空格,再输入回车,程序就不会结束,是什么道理?

预谢!


[此贴子已经被作者于2019-5-4 14:32编辑过]

搜索更多相关主题的帖子: 数字 字符 char int name 
2019-05-04 14:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
檢測最終有效數字位數,自己計數唄。

授人以渔,不授人以鱼。
2019-05-04 19:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
從文本字符串轉換為數字,要預防措施做足的,這個程序不夠。看代碼前面的注釋,這個只是演示如何從流數據讀取和退回數據而已,至於程序如何做到完美地轉換數據,不需要追求。要做的話,有庫函數可用,它能用getch()、ungetc()這類庫函數,自然也能用最普通的stdlib.h的轉換庫函數。

真正能夠實用的帶防錯措施的交互式輸入功能,靠流是不行的。

授人以渔,不授人以鱼。
2019-05-04 20:06
快速回复:请问,数字字符转换为数字存储,如何检测超出位数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024205 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved