使用`getchar()`终止while循环

时间:2012-02-04 07:48:16

标签: c getchar

对于我的家庭作业,我需要实现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()

5 个答案:

答案 0 :(得分:5)

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

您正在比较myChar错误。试试这个:

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

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

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

修改

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

在linux上,要结束标准输入,您必须输入Ctrl-D。内核和tty层使其成为文件结束标记或条件。然后getchar提供EOF有效char,例如在char为0到255之间的无符号字节的系统上,{ {1}}可以是-1)。

请注意,feof(3)仅在读取操作后有效(例如EOFgetchar等...)所以编码fgets通常是错误的(与我在此答案的先前版本中所写的内容相反)。您最好测试while(feof(stdin))返回getchar,以便EOF成为myChar(而不是int)。

答案 3 :(得分:0)

试试此代码

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

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

    return result;
}

答案 4 :(得分:0)

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

他们还有一件事

 getchar()  

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

通过比较

,还有一个错误
   char to a pointer e.g  mychar=="\n"

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