我现在正在编程课程中,并被要求创建一个程序来计算用户输入多个数字的总和 - 然后计算总和的第n个根。如果他们输入的数字小于0,则循环应该丢弃小于0的数字,然后再次询问。
不幸的是,无论我输入什么号码,它都会显示“价值需要大于零!”我尝试在循环中添加fflush(stdin);
语句,但似乎没有做任何事情。
这是我的代码。我非常感谢任何帮助。
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
int main() {
int mTotalNums, mNth; //amount of numbers in set
float mProd = 1, x, mNroot;
printf("How many numbers are in the set?\n");
scanf("%i", &mTotalNums);
mNth = mTotalNums; //set the value of mTotalNums equal to mNth becuase we'll lose the original value of mTotalNums after the loop
while (mTotalNums > 0) {
printf("Input number: ");
scanf("%lf", &x);
if (x > 0) {
mProd *= x;
} else
printf("\nValue needs to be greater than zero!\n");
}
mNroot = pow(mProd, (1 / mNth));
printf("\nThe nth root of the product of %i terms is: %.2f\n", mNth, mNroot);
return 0;
}
答案 0 :(得分:2)
"%lf"
是double
的scanf格式,但x
被声明为float
。
要扫描浮动,您必须使用%f
格式。
另请注意,mTotalNums
在循环中不会递减,因此永远不会
终止。
答案 1 :(得分:2)
阅读scanf(3)的文档。由于x
被声明为float
,因此请使用%f
作为scanf格式控制字符串。另外,请考虑scanf
的结果(如果成功读取一个项目,则为1)。
您应该在编译器中启用所有警告和调试信息,然后学习如何使用调试器(特别是逐步运行程序,显示局部变量等等。)。
(在Linux上,如果使用gcc -Wall -g
进行编译,则会收到有用的警告,并且gdb
调试器会有所帮助......)
答案 2 :(得分:1)
在逻辑语句中检查变量之前,添加printf命令以查看变量包含的内容。
你还需要做一些事情来为你的while循环增加/减少变量...目前没有什么东西在改变mTotalNums,所以它将是一个无限循环。
while (mTotalNums > 0) {
printf("Input number: ");
scanf("%lf", &x);
printf("x=%d", x);
if (x > 0) {
mProd *= x;
} else
printf("\nValue needs to be greater than zero!\n");
mTotalNums--;
}
答案 3 :(得分:1)
尝试对您的程序进行这些修改(添加评论并进行更改)
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
int main() {
//amount of numbers in set
int mTotalNums, mNth;
// Change to double for added precision
double mProd = 1.0, x, mNroot;
printf("How many numbers are in the set?\n");
scanf("%i", &mTotalNums);
// Set the value of mTotalNums equal to mNth becuase
// we'll lose the original value of mTotalNums after the loop
mNth = mTotalNums;
// Don't forget to decrement the loop counter
while (mTotalNums-- > 0) {
printf("Input number: ");
scanf("%lf", &x);
if (x > 0) {
mProd *= x;
} else {
printf("\nValue needs to be greater than zero!\n");
}
}
// Change to 1.0 to force compiler to treat as a double
mNroot = pow(mProd, (1.0 / mNth));
printf("\nThe nth root of the product of %i terms is: %.2f\n", mNth, mNroot);
return 0;
}
您提及&#34; 计算总和的第n个根&#34;,但您的循环显然是累计产品。要更改它以计算总和,请尝试以下添加:
// Declare a sum variable
double sum = 0;
// Sum inside your while loop
sum += x;
// Calculate the nth root of the sum instead
mNroot = pow(sum, (1.0 / mNth));