通过读取字符转换为负整数

时间:2013-07-11 16:12:10

标签: c character-encoding while-loop

这是一个逐字符读取数据的程序,直到找到一个字符数字并将其转换为整数。

#include <stdio.h>

int main(void) {

  char ch = getchar();
  printf("Type some data including a number");
  while(ch < '0' || ch > '9') //as long as the character is not a digit.
  {
    ch = getchar();
  }

  int num = 0;
  while(ch >= '0' && ch <= '9') //as long as we get a digit
  {
    num = num * 10 + ch - '0'; //convert char digit to integer
    ch = getchar();
  }
  printf("Number is %d\n",num);

}

该程序只能找到正整数。我希望程序找到负整数以及浮点数。我如何使程序这样做?我尝试在while循环中使用if语句来查找数字,但这对我没有用。

2 个答案:

答案 0 :(得分:2)

好像fscanf似乎是一个更好的解决方案

答案 1 :(得分:0)

E.g

#include <stdio.h>
#include <ctype.h>

int main(void) {
    //input format ([^0-9]*-)?[0-9]+

    int ch, sign = 1;
    while(!isdigit(ch=getchar())){
        if(ch=='-'){
            ch=getchar();//one character look-ahead
            if(isdigit(ch)){
                sign = -1;
            }
            ungetc(ch, stdin);//push back
        }
    }

    int num;
    for(num=0;isdigit(ch);ch = getchar()){
        num = num * 10 + ch - '0';
    }
    num *= sign;

    printf("Number is %d\n",num);

    return 0;
}