对于我的家庭作业,我需要实现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()
。
答案 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)仅在读取操作后有效(例如EOF
,getchar
等...)所以编码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的更多信息对回答您的问题非常有帮助