仅使用getchar()从输入中获取整数并转换为int

时间:2014-05-08 15:52:17

标签: c int getchar

对于学校作业,我必须制作一个读取整数的C程序,其前面可能是' +'或' - '。我只能使用getchar()。 我可以使用int i = ch - '0'将单个字符转换为int,但我想读取多个字符。除此之外,我需要检查输入是否正确(例如,没有非数字字符串)

到目前为止,我有这个:

int main(void) {
    int i;
    char ch;

    printf("voer een getal in: ");

    while ((ch = getchar()) != '\n') {
        i = ch - '0';

    }

    printf("het ingevoerde getal is: %d\n", i);
    return EXIT_SUCCES;
}

编辑:我知道这不是真正适合这样的问题的地方(我应该学会自己解决这个问题,而不是让其他人为我解决)但我不知道该怎么做了。谢谢你引导我走上正确的道路

5 个答案:

答案 0 :(得分:2)

这应该让你开始:

int main(void) {
    int i = 0;
    int ch;

    printf("voer een getal in: ");

    while ((ch = getchar()) != '\n') {
        if (ch > '9' || ch < '0')
            continue; // or print an error and exit
        i *= 10;
        i += ch - '0';
    }

    printf("het ingevoerde getal is: %d\n", i);
    return EXIT_SUCCES;
}

我会留下潜在的+ / -符号作为练习。

答案 1 :(得分:2)

如果您的学校允许您使用移位运算符,那么这里是从用户获取整数的快速方法,并且根据他们的要求,您可以在整数之前显示+或 - 符号。但请记住不要只是复制粘贴它。首先要理解代码。

    int main(){
        int i = 0;
        char c;
        char sign = 43;

        printf("voer een getal in:\n");
        c = getchar(); 
        if(c == 45)
           sign = 45;
        for(; (c<48 || c>57); c = getchar());
        for(; c>47 && c<58 ; c = getchar()){
            i = (i<<1) + (i<<3) + c - 48;
        }
        printf("het ingevoerde getal is: %c%d\n",sign, i);

        return 0;
    }

答案 2 :(得分:0)

我认为这会奏效。

    while ((ch = getchar()) != '\n') {
        i = ch - '0' + i * 10;

代码中的问题是每次读取新字符时都会覆盖我。您需要存储您阅读的数字,然后添加到它。

答案 3 :(得分:0)

读取多个字符,并确定是正面,负面还是值:

 int sign = 1;
 ch = getchar(); //look at first char (might be a sign indicator)
 if((ch == '-') || (ch == '+')) //consume first char if either `-` or `+`
 {
      if(ch == '-') sign = -1;
 }
 else  //first char non-sign - handle as digit
 {
     if (ch > '9' || ch < '0')
            continue; // or print an error and exit
     i *= 10;
     i += ch - '0';
 }
 while ((ch = getchar()) != '\n') //get remaining chars (assume no embedded sign chars)
 {
     if (ch > '9' || ch < '0')
            continue; // or print an error and exit
     i *= 10;
     i += ch - '0';
 }
 i *= sign; //apply sign to value

答案 4 :(得分:0)

你应该注意不是数字字符:

while((ch=getchar()) != '\n')
   if(ch >= '0' && ch <= '9')
       i += 10* i + (ch - '0');

对于&#39; - &#39;或&#39; +&#39;在开始时你可以存储第一个getchar()。解决方案可能是:

#include <stdlib.h>
#include <stdio.h>

int main(void) {
   int i = 0;
   char ch,first_ch;

   printf("voer een getal in: ");

   ch = first_ch = getchar();
   while (ch != '\n') {
      if(ch >= '0' && ch <= '9')
         i = 10* i + (ch - '0');
      ch = getchar();
   }
   if(first_ch == '-')
      i *= -1;

   printf("het ingevoerde getal is: %d\n", i);
   return EXIT_SUCCESS;
}