我正在处理一个c程序,当我在出现提示时输入double不能继续运行。它会跳过,并且不允许我在循环的第一次运行后输入另一个数字。这是代码示例:
void total_max(double sale[], int n, double *total, double *max, int *max_id);
int main()
{
int n = 7; // length of an array
double sale[n];
int i;
for(i=0; i < n; i++)
{
printf("Enter the sales for salesperson %d\n", i+1);
scanf("%.2f", &sale[i]);
printf("\n");
}
我做错什么了吗?
答案 0 :(得分:1)
fgets
可用于读取输入行,然后使用strtod
解析该行。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 7; // length of an array
double sale[n];
char input[50] = "";
char *next = NULL;
int i;
for(i=0; i < n; i++)
{
do {
printf("Enter the sales for salesperson %d\n", i+1);
if ( fgets ( input, sizeof input, stdin)) {//read up to 49 characters or up to newline
sale[i] = strtod ( input, &next);
if ( next == input) {//could not parse a double
*next = '\0';
}
}
else {
fprintf ( stderr, "problem fgets\n");
return 0;
}
} while ( '\n' != *next);//repeat loop if next is not a newline
printf("\n");
}
for(i=0; i < n; i++) {//print the doubles with precision of 2
printf ( "%d %.2f\n", i + 1, sale[i]);
}
return 0;
}
答案 1 :(得分:0)
它会跳过,因为您在格式字符串中使用了精度字段。
检查以下答案:https://stackoverflow.com/a/29095617/9986735
scanf的格式说明符遵循此原型: %[*] [width] [length]指示符
scanf中没有精度字段。
只需使用:default_destination_recipient_limit = 2
smtp_destination_recipient_limit = 2
。