我如何使用getchar()错误?

时间:2014-03-01 19:51:09

标签: c getchar

好的,所以基本上我试图得到一个程序,将我输入的十六进制转换为它的等效基数10值,我很确定算法是正确的,我只是不能让它正确读取我输入的内容,非常感谢任何帮助:)我很抱歉任何认为这是一个非常愚蠢的问题的人。

int main()
{
      char hexalpha[] = "aAbBcCdDeEfF";
      int i, c;
      int answer = 0;

      c = getchar();

      for (i= 0; answer == 0 && hexalpha[i] != "\0"; ++i)
      {
           if(hexalpha[i]== c)
               answer = (10 + (i/2));
      }

    return answer;
}

3 个答案:

答案 0 :(得分:2)

您无法将字符串与!=进行比较,hexalpha[i]char。因此,您需要hexalpha[i] != '\0'而不是hexalpha[i] != "\0"

从main()返回答案有点笨拙,打印答案会更容易,所以

printf("Answer: %d\n", answer);
return 0;

答案 1 :(得分:0)

您正在返回answer,而不是打印它。你的问题不是输入,而是输出。返回将值传递给任何称为它的函数(或者在main的情况下给出退出状态) 在代码的开头添加以下内容:

#include <stdio.h>

main结束时,将return answer;替换为:

    printf("%i\n", answer);
    return 0;

此外,我建议在for循环中将"0"替换为'0'。您的编译器会向您发出警告,因为它应该是char,而不是*char

答案 2 :(得分:0)

使用getchar似乎没有任何问题。但是,循环条件的后半部分存在问题:您将intc)与字符串("\0")进行比较。您可能意味着使用hexalpha[i] != '\0'(请注意单引号)。

除此之外,你没有看到答案,因为它从未打印过。在大多数shell中,您可以使用$?(在Windows上%errorlevel%)打印上一个程序的返回值,如下所示:

echo $?

例如,如果我运行这样的程序:

> a.out
b
> echo $?
11

您看到getchar正常工作,但您没有看到输出,因为shell通常不会打印程序的返回值。或者,您可以在程序结束时添加printf - 语句。无论如何都建议这样做,因为main的返回值更常用于确定程序是否成功完成。

    printf("%i\n", answer);
    return 0;
}