【发布时间】:2015-01-26 18:15:19
【问题描述】:
我只是使用这个小程序来避免在纸上遍历三个骰子的所有可能组合。它使用 scanf() 接受输入,然后检查每个组合以查看骰子的总和是否是提供的数字。
#include <stdlib.h>
#include <stdio.h>
void main() {
int a,b,c,s,num=0;
printf("Enter the desired sum:");
scanf("%d",&s);
printf("Seeking for sums of %d",s);
for(a=1; a++; a<=6) {
for(b=1; b++; b<=6) {
for(c=1; c++; c<=6) {
if(a+b+c==s) {
num++;
printf("Die 1: %d, Die 2: %d, Die 3: %d",a,b,c);
}
}
}
}
}
问题是,程序没有通过 scanf 语句。我在 scanf 的文档中找不到任何可以表明我做错了什么的内容。我以前遇到过这个问题并且能够解决它,但我想知道发生这种情况的真正原因。我不关心检查有效的整数输入,因为我只会自己使用它,而且我知道我将输入一个整数。
【问题讨论】:
-
如何提供输入?从键盘?
-
在输出末尾打印换行符,即
printf("Seeking for sums of %d\n",s);。另一个printf也一样。 -
你还没有测试来自
scanf()的返回值;你应该有if (scanf("%d", &s) != 1) { ...handle error or EOF... }。 -
这些循环充其量是可疑的(由于整数溢出导致的未定义行为):
for(a=1; a++; a<=6) {应该是for (a = 1; a <= 6; a++) {-- 更改三次。但是玛丽安的评论是您没有看到任何输出的主要原因;printf()在缓冲区填满或输出换行符之前不会写入屏幕。 -
哦,天哪,非常感谢大家——我已经有一段时间没有编程了,甚至没有注意到我搞砸了循环结构。换行符让我解决了 scanf 问题,谢谢玛丽安。