我想打印出某个范围内存在的股息及其总和。假设我给出了 15 到 85 之间的范围并打印能被 4 整除的数字。它工作得很好。但我想要特定形状的输出,例如“ 16 + 32 + 48 + 64 + 80 = 240。 我面临的问题是,当我用 printf 语句打印“+”时,+ 符号也会出现在最后一个输出之后,例如 80 +。这是错误的。请引导我完成它。 当前输出为:16 + 32 + 48 + 64 + 80 + =240
#include <stdio.h>
#include <conio.h>
int main()
{
int first=0;
int second=0;
printf("Enter first number :");
scanf_s("%d",&first);
printf("Enter second number :");
scanf_s("%d",&second);
first++;
int sum=0;
while(first<=second)
{
if(first%4==0 && first%16==0)
{
printf("%d ",first);
printf("+ ");
sum+=first;
}
first++;
}
printf(" =%d ",sum);
}
不要考虑接下来会发生什么,为可能发生的事情做好准备。
我对您的代码进行了两项带注释的更改:
char *connect = ""; // a connection string used soon
while(first<=second)
{
if(first%4==0 && first%16==0)
{
printf( "%s%d", connect, first );
connect = " + "; // if another value output, this prints first
sum += first;
}
first++;
}
printf(" = %d ",sum);
保持 OP 代码的总体外观/感觉,以下提供了改进措施。提供给任何可能认为值得研究的人。
#include <stdio.h>
int main( void )
{
for( ;; ) { // infinite loop
int first;
printf( "Enter first number:" );
scanf_s( " %d", &first );
// Users ALWAYS cooperate and scanf() ALWAYS works as intended
// check of scanf() return value omitted for brevity
int second = first - 1;
while( second <= first ) {
printf( "Enter second number (>%d):", first );
scanf_s( " %d", &second );
}
int interval = 0; // acts like modulo
while( interval < 2 ) {
printf( "Enter interval (2+):" );
scanf_s( " %d", &interval );
}
first += interval - (first % interval);
// Or, one alternative start value
// first += interval - ( first % interval );
int sum = 0;
char *connect = ""; // Answering OP problem of printing
while( first <= second )
{
printf("%s%d", connect, first );
connect = " + "; // subsequent numbers prefixed by " + "
sum += first;
first += interval;
}
printf( " = %d\n", sum );
}
return 0;
}
输出:
Enter first number:-170
Enter second number (>-170):90
Enter interval (2+):42
-126 + -84 + -42 + 0 + 42 + 84 = -126
Enter first number:38
Enter second number (>38):300
Enter interval (2+):42
42 + 84 + 126 + 168 + 210 + 252 + 294 = 1176
编辑:然后
#include <stdio.h>
int main(void)
{
int first=0;
int second=0;
printf("Enter first number :");
scanf("%d",&first);
printf("Enter second number :");
scanf("%d",&second);
int sum=0;
int start=0;
while(first<=second)
{
if(first%16==0)
{
if(start) printf("+ ");
start=1;
printf("%d ", first);
sum+=first;
}
first++;
}
printf("= %d ",sum);
return 0;
}
找到一个解决方案。也就是这样打印总和:
print("\b\b= %d",sum);
+号将在最后一次股息输出时打印。所以我们可以使用转义序列在控制台中移回。在这种情况下,我们使用“”向后移动两次。