我试图找出为什么我无法让它正常运行。我只想要用户输入四个,并在最后运行计算。
#include <stdio.h>
#include <math.h>
int main(){
double amount; /* amount on deposit */
double principal; /* what's the principal */
double rate; /* annual interest rate */
int year; /* year placeholder and no. of total years */
int yearNo;
printf("What is the principal? ");
scanf("%d", &principal);
printf("What is the rate (in decimal)? ");
scanf(" .2%d", &rate);
printf("What is the principal? ");
scanf(" %d", &principal);
printf("How many years? ");
scanf(" %d\n", yearNo);
printf("%4s%21s\n", "Year", "Amount on deposit");
/* calculate the amount on deposit for each of ten years */
for (year = 1; year <= yearNo; year++){
amount = principal * pow(1.0 + rate, year);
printf("%4d%21.2f\n", year, amount);
}
return 0;
}
它正确地询问了本金和利率,但随后跳过了关于委托人的问题并要求多年。然后它只是坐在那里等待“鬼”条目?
我一直在阅读scanf()
在点击enter
时添加了一些空格但是认为%d
之前的空格会解决这个问题?
我还看到你可以在每个do { c=getchar(); } while ( c != '\n');
之后添加scanf
,但这似乎会导致程序崩溃(我也将int c = 0;
添加到了开头)。
感谢您的帮助或想法!
修改
当我从:
更改错误的格式说明符时scanf(" .2%d", &rate);
为:
scanf(" %d", &rate);
输入我的值后,我就崩溃了。
答案 0 :(得分:5)
.2%d
不是有效的格式字符串。
首先,%
必须先行。此外,如果您在浮点值之后,d
不是正确的字符 - 它是积分值。
你应该使用%f
之类的东西(你不需要宽度或精度修饰符)。
最重要的是,您在scanf
个来电之一中没有使用指针时犯了一个小错误:
scanf(" %d\n", yearNo);
这可能会导致崩溃,应该改为:
scanf(" %d\n", &yearNo);
而且,作为最终建议,完全没必要在%d
或%f
格式说明符族之前使用空格(或换行后的换行符)。扫描仪会自动跳过这两个空格。
因此,此程序中 所需的唯一两个scanf
格式字符串为"%d"
和"%lf"
(f
用于浮点数,{ {1}}是双打的。)