gpt4 book ai didi

c - 代码没有输出,但正在运行。 [C]

转载 作者:行者123 更新时间:2023-11-30 21:20:07 24 4
gpt4 key购买 nike

代码功能:这是一个俄罗斯农民乘法计算器。
代码:

#include <stdio.h>
#include <math.h>

main(){
int ier, product = 0, check, i = 1; //var to store numbers
float cand; //Var to store decimal numbers

while(i != 0){
printf("\nInput only whole numbers!"); //Ask user for number to be multiplied
printf("\nMultiplier: ");
scanf("%d", &ier);
printf("Multiplicand: ");
scanf("%d", &cand);

while(i != 0){
if((ier == 0 && cand > 0) || (ier > 0 && cand == 0) || (ier == 0 && cand < 0) || (ier < 0 && cand == 0)){//Regulations for the code
printf("Product: 0");
printf("\n\nInput only whole numbers!");
printf("\nMultiplier: ");
scanf("%d", &ier);
printf("Multiplicand: ");
scanf("%d", &cand);
}
if((ier > 0 && cand > 0) || (ier < 0 && cand > 0) || (ier > 0 && cand < 0) || (ier < 0 && cand < 0)){
break;
}
if(ier == 0 && cand == 0){//If user inputs 0 and 0, end code
return 0;
}
}

while(i != 0){
if((ier < 0 && cand > 0) || (ier > 0 && cand < 0) || (ier < 0 && cand < 0)){//Regulations for the code
printf("Values must not be negative");
printf("\n\nInput only whole numbers!");
printf("\nMultiplier: ");
scanf("%d", &ier);
printf("Multiplicand: ");
scanf("%d", &cand);
}
if((ier > 0 && cand > 0) || (ier == 0 && cand > 0) || (ier > 0 && cand == 0) || (ier == 0 && cand < 0) || (ier < 0 && cand == 0)){
break;
}
if(ier == 0 && cand == 0){//If user inputs 0 and 0, end code
return 0;
}
}

if(ier > 0 && cand > 0){
printf("Calculating Product:");//It should print this, but it isn't for some reason.
while(i != 0){
if(fmod(cand, 2) != 0){
if(fmod(cand, 1) != 0){
product = product + floor(cand);
cand = floor(cand);
printf("%d \t%f", ier, cand);
}
else{
product = product + cand;
printf("%d \t%f", ier, cand);
}
}
if(cand == 1){
printf("Product: %d", product);
break;
}
ier *= 2;
cand /= 2;
}
}
}
}

问题:当我运行代码并输入例如 5 和 2 时,它会继续运行而不输出任何内容。我认为代码中的问题是fmod()。我仅使用 fmod,因为您无法在浮点变量上使用模数运算符 %
我所做的事情:我将 fmod 更改为模运算符 % 并将 cand 变为整数。这有效,但现在我遇到了小数问题,因为整数四舍五入十进制数。所以我回到了fmod
输入:

gcc version 4.6.3
Input only whole numbers!
Multiplier: 5
Multiplicand: 2
/*Runtime: infinite*/

我想要的输出

Multiplier: 57
Multiplicand: 86
Calculating product:
114 43
228 21
912 5
3648 1
Product: 4902
Multiplier: 48
Multiplicand: -36
Values must not be negative
Multiplier: 27
Multiplicand: 0
Product: 0
Multiplier: 0
Multiplicand: 0

P.S:这是我第一次使用fmodfloor()

最佳答案

阅读您的代码后,我发现您错误地使用了 scanf 函数。在第一个 while 循环之后的代码中,您执行了以下操作:

while(i != 0){
printf("\nInput only whole numbers!"); //Ask user for number to be multiplied
printf("\nMultiplier: ");
scanf("%d", &ier);
printf("Multiplicand: ");
scanf("%d", &cand);

如果你看看这句话上面的 scanf,你会发现你做到了(正如 @MartinR 指出的那样):

scanf("%d", &cand);

您需要将代码更改为以下内容:

scanf("%f", &cand);

这将修复你的无限运行时间。另外,@ABusyProgrammer 可能先写了回复(这是正确的),他/她没有正确阅读帖子。 正在使用需要 float 的fmod。因此,您需要使用我上面编写的scanf。仅当您使用 % 运算符时,@ABusyProgrammer 才是正确的。

关于c - 代码没有输出,但正在运行。 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42865317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com