代码中13行sacnf应在接收0 0 0 0 0 0\n后break,但是运行时需要再输入一次才能break(输入“a”,0,11111,00000均可)改为sacnf(“%d*6”&a&b等等)后则没有问题。是何原因?
【以下回答由 GPT 生成】
问题的根本原因是scanf函数在读取输入时会将换行符(\n)留在输入缓冲区中,导致第二次循环时无法正确读取输入。因此,我们需要在每次读取完输入之后,清空输入缓冲区中的换行符。
解决方案如下:
在scanf函数之后,添加一个getchar函数来清空输入缓冲区中的换行符。
#include <stdio.h>
#include <math.h>
int main() {
int t, sum, s1, s2, i, j, k;
int a[101][6];
int b[4] = { 0, 5, 3, 1 };
int c[101][1];
for (i = 0; i < 101; i++) {
sum = 0;
s1 = 0;
s2 = 0;
t = 0;
for (j = 0; j < 6; j++) {
scanf("%d", &a[i][j]);
sum += a[i][j];
}
getchar(); // 清除输入缓冲区的换行符
if (sum == 0) {
break;
} else {
t = a[i][5] + a[i][4] + a[i][3] + ceil(a[i][2] / 4);
s2 = a[i][3 * 5 + b[3] * 1];
if (a[i][1] > s2) {
t += ceil((a[i][1] - s2) / 9);
}
s1 = t * 36 - a[i][5] * 36 - a[i][4] * 25 - a[i][3] * 16 - a[i][2] * 9 - a[i][1] * 4;
if (a[i][0] > s1) {
t += ceil((a[i][0] - s1) / 36);
}
c[i][0] = t;
}
}
for (k = 0; k < i; k++) {
printf("%d\n", c[k][0]);
}
return 0;
}
通过添加getchar()
,程序会清除输入缓冲区中的换行符,便可以正常读取输入,使程序在接收到"0 0 0 0 0 0"后立即退出循环并结束。
希望能对你有所帮助!如果还有其他问题,请随时提出。
%d后面的空格删了,他在等你最后一个空格输入