Вводится лишнее число - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Проблема в том, что в этом коде, после ввода числа n надо вводить ещё какое-о число, откуда это число я не знаю. В конце это число является первым элементом массива A. Если в этой строчке scanf("%i", &n); после %i поставить \n или \t, то лишнее число вводится между первым и вторым элементом массива. Как это исправить? Вроде раньше тоже самое делал и всё нормально было. Хотя может что-то перепутал. Пишу в embarcadero.
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <math.h>
 
int _tmain(int argc, _TCHAR* argv[])
{  SetConsoleOutputCP(1251);
   SetConsoleCP(1251);
   int n,i;
   float *A;
    printf ("Сколько чисел\n");
    scanf("%i", &n);
   A = new float [n];
   printf ("Введите свои числа\n");
   for (i = 0; i < n; i++) {
   printf ("A[%i]\t", i+1);
   scanf("%f\n", &A[i]);
   }
   for (i = 0; i < n; i++) {
         printf ("%f\t", A[i]);
   }

    getch();
    return 0;
}
Никто не ответил попробую по-понятнее описать проблему. В консоле я вижу следующее. Введите количество чисел: например 5. Но тут надо ввести ещё какое-то число, чтобы пойти дальше. Ну например 3. Дальше вожу элементы массива : 9 8 7 6 5. Дальше должен получить элементы массива на экране, но мне выдаёт следующее. 3 9 8 7 6. Т.е это число на что-то влияет. В чём проблема? Такое же происходит не только с этим кодом.

Решение задачи: «Вводится лишнее число»

textual
Листинг программы
#include <stdio.h>
 
int main() {
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    int n, i;
    float* a;
    
    printf("Сколько чисел\n");
    scanf("%d", &n);
    
    a = (float*) malloc(n * sizeof(int));
    
    printf ("Введите свои числа\n");
    for ( i = 0; i < n; i++ ) {
        printf ("a[%d]\n", i+1);
        scanf("%f", &a[i]);
    }
    
    for (i = 0; i < n; i++) {
        printf("%g\n", a[i]);
    }
    free(a);
 
    getch();
 
    return 0;
}

Объяснение кода листинга программы

В данном коде:

  1. #include - подключаем стандартную библиотеку для работы с выводом в консоль
  2. int main() { - объявляем функцию main, с которой начинается выполнение любой программы
  3. SetConsoleOutputCP(1251); - устанавливаем кодировку вывода на консоль
  4. SetConsoleCP(1251); - устанавливаем кодировку ввода с консоли
  5. int n, i; - объявляем переменные n и i типа int
  6. *float a;* - объявляем переменную a типа float (указатель на float), которая будет использоваться как массив
  7. printf(Сколько чисел\n); - выводим сообщение Сколько чисел
  8. scanf(%d, &n); - считываем с консоли целое число и сохраняем его в переменной n
  9. a = (float) malloc(n sizeof(int)); - выделяем память под массив a с помощью функции malloc, размер массива равен n умноженное на размер int (по умолчанию 4 байта)
  10. printf (Введите свои числа\n); - выводим сообщение Введите свои числа
  11. for ( i = 0; i < n; i++ ) { - начинаем цикл for для перебора элементов массива a от 0 до n-1
  12. printf (a[%d]\n, i+1); - выводим сообщение a[i+1]
  13. scanf(%f, &a[i]); - считываем с консоли число с плавающей точкой и сохраняем его в элементе массива a[i]
  14. } - заканчиваем цикл for
  15. for (i = 0; i < n; i++) { - начинаем цикл for для перебора элементов массива a от 0 до n-1
  16. printf(%g\n, a[i]); - выводим значение элемента массива a[i]
  17. } - заканчиваем цикл for
  18. free(a); - освобождаем память, выделенную под массив a, с помощью функции free
  19. getch(); - получаем символ из консоли (функция getch)
  20. return 0; - завершаем выполнение функции main, возвращаем 0 (что означает успешный конец работы программы)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.692 из 5
Похожие ответы