我尝试使用getchar()读取整数。这是我使用的代码:
int n
thisChar
初始化为零,int
被声明为start of heading
对于单个数字输入,n返回-47,这意味着首先读取thisChar
的字符值。我在while
表达式中分配 ..SalesOrderItems = getOrderLines(sql1[i].Id);
的方式是否有不正确之处?
答案 0 :(得分:5)
缺少括号:
int thisChar;
while ((thisChar = getchar()) != '\n') {
n = n * 10 + thisChar - '0';
}
如果没有这些额外的括号,您始终会将thisChar
的值分配给getchar() != '\n'
,即始终1
或0
......
请注意,您还应该处理EOF
:
int thisChar = getchar();
while (thisChar != EOF && thisChar != '\n') {
n = n * 10 + thisChar - '0';
thisChar = getchar();
}
答案 1 :(得分:3)
!=
的优先级高于=
运算符的优先级。因此,表达式
while(thisChar = getchar() != '\n') {...}
将被解析为
while(thisChar = (getchar() != '\n')) {...}
,比较getchar() != '\n')
的结果将分配给thisChar
。
您需要将子表达式thisChar = getchar()
放在括号
while((thisChar = getchar()) != '\n') {...}