#c #io #floating-point
#c #io #с плавающей запятой
Вопрос:
Я пытаюсь решить проблему, для которой мне придется хранить значения с плавающей запятой в 3 разных массивах, удивительно, что все сохраняемые значения являются нулями, не могли бы вы указать, что здесь происходит не так.
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
vector<float>prb(n 1,0),prft(n 1,0),loss(n 1,0);
for(int i=1;i<=n;i ){
float x;
cin>>x;
prb.push_back(x);
}
for(int i=1;i<=n;i ){
float x;
cin>>x;
prft.push_back(x);
}
for(int i=1;i<=n;i ){
float x;
cin>>x;
loss.push_back(x);
}
cout<<endl;
for(ll i=1;i<=n;i ){
cout<<prb[i]<<' ';
}
cout<<endl;
for(ll i=1;i<=n;i ){
cout<<prft[i]<<' ';
}
cout<<endl;
for(ll i=1;i<=n;i ){
cout<<loss[i]<<' ';
}
return 0;
}
Ввод :
4 2
0.50 0.50 0.50 0.50
4.00 1.00 2.00 3.00
4.00 0.50 1.00 1.00
Вывод :
0 0 0 0
0 0 0 0
0 0 0 0
Редактировать : массивы преобразованы в векторы с плавающей запятой. Все еще не получая в них желаемых значений. Ребята, вы думаете, что проблема в компиляторе или я делаю что-то глупое с c .
Комментарии:
1.
typedef unsigned long long int ull;typedef long long int ll;
— Нет абсолютно никакой необходимости в этих сумасшедших макросах. C имеетint64_t
,uint64_t
. Во-вторых, это:float prb[n 1];
и строки, которые выглядят так, не являются допустимыми C . Похоже, вы изучаете C с этих сайтов «конкурентного программирования».2. Действительно, но в любом случае это облегчает мою жизнь. Как же так? Замедление выглядит нормально для меня?
3. Ваш код имеет много признаков использования для так называемых сайтов-конкурентов. Все такие сайты учат, что это действительно вредные привычки, которые вам не следует использовать (и если вы используете какой-либо из них на собеседовании, вас, скорее всего, не примут на работу). Включая один (массивы переменной длины), который делает ваш код недопустимым в стандартном C .
4. Дело в том, что другие здесь смотрят на ваш код. Запутывание его с помощью этих безумных макросов затрудняет другим отслеживание того, что вы делаете. Во-вторых, C запускает индексы массива с
0
, не1
.5. @PawanNirpal — Теперь вы создали другую проблему. Теперь вы определяете размеры своих векторов при построении, но затем вы вызываете
push_back
увеличение размера векторов. Теперь вы видите, почему конкурентные сайты по программированию бесполезны в обучении правильному написанию кода на C .
Ответ №1:
Сохраняемые значения не являются нулями, просто вы инициализируете свои векторы с заданным размером, при этом эти значения равны нулю.
push_back
добавляет новые элементы в конец вектора.
Использование at
вместо push_back
— это исправление.
Комментарии:
1. Спасибо за усилия, но я все еще получаю те же нули.
Ответ №2:
Поехали,
vector<float>prb(n 1,0),prft(n 1,0),loss(n 1,0);
Может быть заменен на,
vector<float>prb(n),prft(n),loss(n);
В вашей оригинальной программе это исправить 🙂
Кроме того, при доступе к значениям (именно cout ) обращайтесь к i-1-му элементу вместо i-го. Поскольку индексация по умолчанию выполняется на основе 0, и вы получаете доступ с индекса 1.
Например, prb[i-1], prft [i-1] и потеря [i-1].
Комментарии:
1. Это сработало, я чувствую себя таким глупым из-за того, что мне не нужно было реализовывать такой простой способ сделать это, большое спасибо.
Ответ №3:
Это работает, просто проверьте этот пример кода и введите входные числа с плавающей запятой
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<float> v1;
float x;
for(int i=0;i<5;i ){
cin>>x;
v1.push_back(x);
}
for (int i = 0; i < v1.size(); i) {
cout << v1[i] << ' ';
}
return 0;
}