输入数组加倍的麻烦

时间:2018-06-24 23:31:48

标签: c arrays

我正在处理一个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");
  }

我做错什么了吗?

2 个答案:

答案 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