Примечание: этот ответ написан для кода исходного вопроса.
Использование компилятора с приличными диагностическими сообщениями поможет вам в изучении C++. Диагностика, созданная clang для вашей программы, выделяет несколько проблем, включая основную проблему, которая дает вам проблемы.
main.cpp:3:2: error: C++ requires a type specifier for all declarations
main()
^~~~
Это происходит потому, что объявления функций должны включать тип возврата. Для main
это должно быть int
, поэтому вы должны написать int main()
.
main.cpp:12:19: warning: format specifies type 'int *' but the argument has type 'float *' [-Wformat]
scanf("%d \n", &array[i]) ; //read the keyboard input and memorize it in the array
~~ ^~~~~~~~~
%f
Ваш массив представляет собой массив из поплавков, пока вы говорите scanf
читать целые числа ("% d" означает int
, "% F" означает float
). Это приведет к неопределенному поведению и, вероятно, послужит причиной странного поведения, которое вы описываете (печать нулей вместо ожидаемых значений).
Поскольку ваше назначение включает в себя массив целых чисел, вы, вероятно, должны изменить свой массив, чтобы использовать int
вместо float
. Если вы сделаете это изменение, вам нужно будет изменить строку формата printf
, чтобы указать int
s вместо float
.
Также вы путаетесь с размером массива. Вы объявили массив для хранения 9 значений, когда вы действительно хотите десять. Предположительно, что вас смущает то, что индекс для доступа к n-му элементу равен n-1
, поэтому для доступа к десятому элементу вы пишете array[9]
. Это применяется при обращении к элементам, а не при объявлении массива. Чтобы объявить массив из десяти элементов, вы скажете int array[10];
. В вашем случае у вас есть переменная n
, которая используется для итерации по массиву; Это правильно, и хорошая практика, чтобы использовать то же переменный в обоих цикле и при объявлении массива, как следующее demonstrages фрагмента кода:
const int n = 10;
int array[n];
for (int i=0; i<n; ++i)
Поскольку ваш код пытается прочитать десятую значения в массив из девяти элементов, программа снова демонстрирует неопределенное поведение.
main.cpp:28:6: error: use of undeclared identifier 'system'
system("PAUSE");
^
Вы не включили правильный заголовок функции system()
. Вы должны #include <stdlib.h>
(или в то, что считается хорошей практикой для C++ вы должны #include <cstdlib>
и явно претендовать system
в std::system("PAUSE")
.
После устранения этих проблем ваша программа, кажется, работает хорошо. Первая проблема
90/100 является целочисленной арифметики, что приводит к 0. Использование 90,0/100,0 – OldProgrammer
Это _is not_ C++ код. Вы имели в виду использовать тег 'C'? Если вы хотите ответить на C++, то идиоматический путь будет гораздо более кратким. Кроме того, вы преодолеваете границы своего массива. – Chad
@OldProgrammer: не должно быть проблемой, поскольку слева направо оценка выражения (float * 90/100 остается float) ... – mb84