我新来的C决定自己学习,因为某些工作要求(在此之前知道一些java)。我希望我不会因为这个问题而被投票,因为我已经搜索了C中的while
个循环,使用了scanf()
和变量赋值,看看我是否已经错过任何事情,但没有解释为什么即使对while循环的变量status
的检查不再是 true ,下面的代码也会运行。这个程序来自一本教科书,但它并没有解释为什么它可以作为一个例子。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
long num;
long sum = 0L;
int status;
printf("Please enter an integer to be summed ");
printf("(q to quit): ");
status = scanf("%ld", &num);
while (status == 1) {
sum = sum + num;
printf("Please enter next integer (q to quit): ");
status = scanf("%ld", &num);
}
printf("Those integers sum to %ld.\n", sum);
return 0;
}
当我在控制台上输入一个数字(由scanf
读取为输入时)并且根据我的理解,该数字明确地分配给变量status
。然而,while
循环正在检查每次迭代是否status == 1
那么为什么在之后输入scanf
时读取的数字,而while循环开始并分配到status
循环继续?此时status
变量显然不再是1
。但是,当我按照打印的句子的建议输入q
以输入q退出时,它会停止。
我认为可能会检查您输入的值是integer
还是long
,以及它们是否属于char
或while
。例如,如果输入是status
)则打破循环。但问题是我无法在任何地方找到确认或解释,为什么不检查1
循环检查browser_stats_daily
+----+-------------+----------------------------------------------------------------------+--------------+
| id | access_date | user_agent | num_requests |
+----+-------------+----------------------------------------------------------------------+--------------+
| 6 | 2016-09-24 | Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) | 4729 |
| 10 | 2016-09-24 | Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko | 16396 |
| 12 | 2016-09-24 | Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko | 33623 |
| 17 | 2016-09-24 | MobileSafari/602.1 CFNetwork/808.0.2 Darwin/16.0.0 | 98 |
| 28 | 2016-09-24 | Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0) | 10333 |
| 33 | 2016-09-24 | Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko | 5745 |
| 34 | 2016-09-24 | Mozilla/5.0 (compatible; AhrefsBot/5.1; +http://ahrefs.com/robot/) | 5 |
| 46 | 2016-09-24 | Mozilla/5.0 (Windows NT 6.1; rv:49.0) Gecko/20100101 Firefox/49.0 | 339 |
| 51 | 2016-09-24 | - | 13 |
| 53 | 2016-09-24 | MobileSafari/601.1 CFNetwork/758.5.3 Darwin/15.6.0 | 38 |
+----+-------------+----------------------------------------------------------------------+--------------+
是否是精确整数user_agents
+----+----------------+---------+----------+-------+-------+
| id | user_agent | vendor | platform | major | minor |
+----+----------------+---------+----------+-------+-------+
| 2 | %Firefox/38.0% | Mozilla | Firefox | 38 | 38.0 |
+----+----------------+---------+----------+-------+-------+
。
答案 0 :(得分:4)
从
中删除&符号printf("Those integers sum to %1d.\n", &sum);
应该是
printf("Those integers sum to %ld.\n", sum);
修改正如其他人所指出的那样,%1d
中的那个是拼写错误,它会导致scanf
读取一位数的int
值。将其替换为%ld
('ell'代表'long')。类似于printf
,'l'修饰符告诉函数它要打印的int
大小。
答案 1 :(得分:3)
但问题是我无法在任何地方找到确认或解释,为什么不检查while循环检查状态是否是精确整数“1”。
是的。 status
是scanf
的返回值,即读取的字段数。当且仅当读取了一个有效字段时,这将是一个。