我正在研究以m1,n1,m2,n2的形式读取整数序列的代码,直到我输入零,并且它打印m * n的总和。以下是我到目前为止的情况:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
int m, n, i, sum = 0;
bool plus = true;
scanf("%d", &m);
scanf("%d", &n);
for(i = m; i <= n; i++)
{
sum = sum + (m * n);
if(!plus)
{
putchar('+');
}
printf("%d*%d", m, n);
plus = false;
}
printf("=%d\n", sum);
return 0;
}
如果我输入1,1,0,则输出1 * 1 = 1,但如果我输入1,2,3,4,0,则输出1 * 2 + 1 * 2 = 4。我只是对如何计算1 * 2和3 * 4感到困惑。
答案 0 :(得分:2)
你从不读第3和第4个参数,因为scanf调用在循环之外。如果你把它们和plus初始化放在循环中,并纠正循环启动和终止条件你的代码应该工作(如果我没有遗漏任何其他东西)。
答案 1 :(得分:1)
我正在研究读入整数序列的代码 形式为m1,n1,m2,n2,直到我输入零
您使用的方法似乎是错误的。您不应输入变量m
和n
。至少我没有看到你的代码输入和检查了0。
你在做的是计算
sum = sum + (m * n);
循环中 n - m + 1
次。由于m
和n
的输入与1
和2
相对应,因此您获得了4
(1 * 2 + 1 * 2
)。
我可以建议以下方法。
#include <stdio.h>
int main(void)
{
printf( "Enter a sequence of integers (0 - exit): " );
long long int sum = 0;
int value, prev_value;
unsigned int i;
i = 0;
while ( scanf( "%d", &value ) == 1 && value != 0 )
{
if ( i % 2 )
{
if ( i != 1 ) printf( " + " );
printf( " %d * %d ", prev_value, value );
sum += ( long long int )prev_value * value;
}
else
{
prev_value = value;
}
++i;
}
if ( i % 2 )
{
if ( i != 1 ) printf( " + " );
printf( "%d", prev_value );
sum += prev_value;
}
printf( " = %lld\n", sum );
return 0;
}
程序输出可能看起来像
Enter a sequence of integers (0 - exit): 1 2 3 4 0
1 * 2 + 3 * 4 = 14
答案 2 :(得分:0)
你不希望这样的for
循环,因为你想循环一个不确定的数量。我建议您在达到终止条件时(或while (true)
无法读取两个输入时)从循环中使用break
和scanf()
:
#include <stdio.h>
#include <stdbool.h>
int main()
{
int sum = 0;
char const *plus = "";
while (true)
{
int m, n;
if (scanf("%d%d", &m, &n) != 2)
break;
if (m == 0 || n == 0)
break;
sum += m * n;
printf("%s%d*%d", plus, m, n);
plus = "+";
}
printf("=%d\n", sum);
}
其他一些改进:我已将m
和n
的范围缩小到循环内部,并且我已更改plus
以引用实际要插入的字符串,而不是通过布尔值间接。
可以说,您可能希望将scanf()
分成两个调用,以便终止0
无需配对:
if (scanf("%d", &m) != 1 || m == 0)
break;
if (scanf("%d", &n) != 1 || n == 0)
break;
答案 3 :(得分:-1)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int sum, m, n;
if (!scanf("%d", &m))
return 0;
while (m)
{
if (!scanf("%d", &n))
return 0;
sum += m * n;
if (!scanf("%d", &m))
return 0;
}
printf("%d", sum);
}
试试这个。我写得很快,但应该有效。代码还应检查参数的数量是否正确(用户输入为X 0或X X X 0等情况)。您的代码中发现的问题: