2015-10-11 2 views
0

У меня есть домашнее задание, которое требует ввода пользователем набора действительных чисел. Я должен хранить их в массиве размером 20 и должен печатать массив в float s.Печать массива в float, где размер зависит от пользовательского ввода

Моя проблема заключается в том, что мой массив печатает больше пяти чисел, которые требуются. пять номеров: 10, 37, 15, 21, 18.

Мне нужна помощь при печати только пяти номеров, в float с одним десятичным знаком.

Я использую Centos6.7 в Oracle VM VirtualBox с текстовым редактором gedit. Любая помощь приветствуется.

#include <stdio.h> 
#define SIZE 20 


int main(void) 
{ 
    int i, inputs[SIZE]; 

    printf("Enter real numbers, up to %d, q to quit\n", SIZE); 
    for(i=0; i < SIZE; i++) 
     scanf("%d", &inputs[i]); 

    printf("You entered the following values:\n"); 
    for(i=0; i < SIZE; i++) 
     printf("%4d", inputs[i]); 
    printf("\n"); 

return 0; 
} 

Это выход из программы:

[[email protected] cprog]$ gcc jperez_aver.c 
[[email protected] cprog]$ ./a.out 
Enter real numbers, up to 20, q to quit 
10 37 15 21 18 q 
You entered the following values: 
    10 37 15 21 18 04195443 0-503606696327674196037 0-891225184 494195968 0 0 04195552 0 
+1

Первая проблема, которую я вижу здесь: вы предлагаете пользователю вводить реальные цифры, но вместо этого ожидайте целые числа. –

+1

Вы всегда должны компилироваться с предупреждениями и компилироваться в последней версии C, т. Е. Использовать 'gcc jperez_aver.c -Wall -Wextra -pedantic -std = c11'. –

+1

Вторая проблема: вы печатаете весь массив, независимо от того, сколько значений было введено. –

ответ

5

Вы должны следить за сколько номеров пользователь вошел. Для этого вам нужна новая переменная. Увеличьте его, если пользователь вводит целое число. Что-то вроде этого будет достаточно:

#include <stdio.h> 

#define SIZE 20 

int main(void) 
{ 
    int i, count = 0, inputs[SIZE];  /* Note the new variable */ 

    printf("Enter real numbers, up to %d, q to quit\n", SIZE); 
    for(i = 0; i < SIZE; i++) 
    { 
     if(scanf("%d", &inputs[i]) == 1) /* If `scanf` was successful in scanning an `int` */ 
      count++;      /* Increment `count` */ 
     else        /* If `scanf` failed */ 
      break;      /* Get out of the loop */ 
    } 

    printf("You entered the following values:\n"); 
    for(i = 0; i < count; i++)   /* Note the change here */ 
     printf("%4d", inputs[i]); 

    printf("\n"); 

    return 0; 
} 

Если вы хотите, чтобы пользователь мог ввести цифры, имеющие десятичные, вы должны использовать:

#include <stdio.h> 

#define SIZE 20 

int main(void) 
{ 
    int i, count = 0; 
    float inputs[SIZE];     /* For storing numbers having decimal part */ 

    printf("Enter real numbers, up to %d, q to quit\n", SIZE); 
    for(i = 0; i < SIZE; i++) 
    { 
     if(scanf("%f", &inputs[i]) == 1) /* If `scanf` was successful in scanning an `float` */ 
      count++;      /* Increment `count` */ 
     else        /* If `scanf` failed */ 
      break;      /* Get out of the loop */ 
    } 

    printf("You entered the following values:\n"); 
    for(i = 0; i < count; i++) 
     printf("%.1f \n", inputs[i]); /* Print the number with one digit after the decimal, followed by a newline */ 

    printf("\n"); 

    return 0; 
} 

Следует отметить, что обе вышеуказанные подходы оставляет q (или что-то нецелое, введенное пользователем) в stdin. Вы можете очистить это от stdin с помощью

int c; 
while((c = getchar()) != '\n' && c != EOF); 

после первого for цикла.

+1

Немного nitpick слева: по какой-то причине задание требует 'float' ... Я вижу это требование braindead вокруг множества заданий, например, профессора никогда не слышали о том, что' float' повышается до 'double' в любом случае при вызове переменной функция .... –

+1

Хм, 'двойной' конечно * есть * путь ... но если профессор хочет« нечувствительный »код, о хорошо ... –

+0

Спасибо за ввод и редактирование @ Круто. Поэтому моя ошибка заключалась в печати всего массива, вместо создания отдельной переменной, которая может быть увеличена вместе с переменными, вводимыми пользователем. Я вижу это, и для уточнения назначение требует, чтобы выход был форматом «0.0». Первое, что приходило в голову, было плавать. Большое вам спасибо за помощь. – MarineUTEP