Вводится лишнее число - 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; }
Объяснение кода листинга программы
В данном коде:
- #include
- подключаем стандартную библиотеку для работы с выводом в консоль - int main() { - объявляем функцию main, с которой начинается выполнение любой программы
- SetConsoleOutputCP(1251); - устанавливаем кодировку вывода на консоль
- SetConsoleCP(1251); - устанавливаем кодировку ввода с консоли
- int n, i; - объявляем переменные n и i типа int
- *float a;* - объявляем переменную a типа float (указатель на float), которая будет использоваться как массив
- printf(
Сколько чисел\n
); - выводим сообщениеСколько чисел
- scanf(
%d
, &n); - считываем с консоли целое число и сохраняем его в переменной n - a = (float) malloc(n sizeof(int)); - выделяем память под массив a с помощью функции malloc, размер массива равен n умноженное на размер int (по умолчанию 4 байта)
- printf (
Введите свои числа\n
); - выводим сообщениеВведите свои числа
- for ( i = 0; i < n; i++ ) { - начинаем цикл for для перебора элементов массива a от 0 до n-1
- printf (
a[%d]\n
, i+1); - выводим сообщениеa[i+1]
- scanf(
%f
, &a[i]); - считываем с консоли число с плавающей точкой и сохраняем его в элементе массива a[i] - } - заканчиваем цикл for
- for (i = 0; i < n; i++) { - начинаем цикл for для перебора элементов массива a от 0 до n-1
- printf(
%g\n
, a[i]); - выводим значение элемента массива a[i] - } - заканчиваем цикл for
- free(a); - освобождаем память, выделенную под массив a, с помощью функции free
- getch(); - получаем символ из консоли (функция getch)
- return 0; - завершаем выполнение функции main, возвращаем 0 (что означает успешный конец работы программы)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д