Вводится лишнее число - 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 (что означает успешный конец работы программы)