2

对于我的家庭作业,我需要实施 Horners 算法以在基础之间进行转换。

我被告知要getchar()用于这项任务。但是我遇到了一个问题,当我按 Enter 键时,程序不会终止,只会接收更多字符。

例子:

bryce> ./pa1
Enter the fromRadix:16

Enter the toRadix:2
abc
abc
^C
bryce> 

代码:

int readRadixA(int radixA)
{
    char myChar = getchar(); 
    int result = 0; 
    int run = 0; 

    while(myChar != EOF)
    {
        if(myChar == "\n")
            break;

        Horners();

        myChar = getchar(); 
    }

    return result;
}

我不是在寻求帮助实施 Horners;我正在寻求帮助以getchar()正确终止。

4

5 回答 5

5
if(myChar=="\n")
           ^  ^

你比较myChar错了。试试这个:

if(myChar == '\n') 
             ^  ^

第二个问题是getchar返回int,而不是char。也许你可以像这样重写它:

int myChar;
while((myChar = getchar()) != EOF && myChar != '\n')
{
    /* Your stuff. */
}

编辑

根据评论,我认为之前的一些 stdio 操作while将 a 留\n在缓冲区中。

而不是scanf("%d", &radix)尝试:

scanf("%d ", &radix);
         ^

该空间将使scanf剩余的空白(包括换行符)吃掉。

于 2012-02-04T07:50:09.580 回答
1

检查返回类型getchar()。是的,它是一个int。那是因为EOF必须有一个可以与有效字符区分开来的值。myChar实际上必须是int

于 2012-02-04T07:50:31.437 回答
0

在 linux 上,要结束标准输入,您必须键入  Ctrl-D. 内核和tty层使它成为文件结束标记或条件。然后getchar给出EOF(这不是有效char的,例如在char0 到 255 之间的无符号字节的系统上,EOF可能是 -1)。

请注意,feof(3)读取操作(例如getcharfgets等)之后才有效,因此编码while(feof(stdin))通常是错误的(与我在此答案的先前版本中所写的相反)。你会更好地测试它getchar正在返回EOF,所以你myChar应该是int(而不是char)。

于 2012-02-04T07:51:14.143 回答
0

试试这个代码

int readRadixA(int radixA)
{
    char myChar;
    int result = 0; 
    int run = 0; 

    do
    {
        myChar = getchar(); 
        // implement horners here
    }while(myChar != 13);

    return result;
}
于 2012-02-04T07:53:24.173 回答
0

我检查了您的代码,我认为您在 toRadix 之后的输入键盘缓冲区中留下了一个 '\n'。

他们的另一件事是

 getchar()  

一口气读取所有字符,直到收到 '\n'。

你又犯了一个错误,通过比较

   char to a pointer e.g  mychar=="\n"

有关您的 toRadix 实施的更多信息对于回答您的问题非常有帮助

于 2012-02-04T09:19:59.993 回答