Функция setprecision c/c++ Особенности компиляторов

166
12 апреля 2019, 03:30

Написал вот такой код на visual-studio-2017:

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include "pch.h"
#include <iostream>
#include <vector>
#include <cmath>
#include <clocale>
#include <string>
#include "stdio.h"
#include <iomanip>
#include <fstream>
using namespace std;
int main() {
char *locale = setlocale(LC_ALL, "russian");
    cout << "============================================== " << endl
    << "Введите 6 строк массива А. Каждая строка состоит из 4 вещественных чисел, разделенных пробелом." << endl
    << "Ожидание ввода..." << endl;

const int M = 6, N=4;
char A[1000];
double dA[M][N]{};
for (int i = 0; i < M; i++) {
    gets_s(A);
    char *strnum = strtok(A, " ");
    int j = 0; 
    while (strnum != NULL)
    {
        dA[i][j] = atof(strnum);
        j++;
        strnum = strtok(NULL, " ");
    }
}
for (int m = 0; m < M; m++) {
    for (int n = 0; n < N; n++) {
    cout << setprecision(2) << setiosflags(ios::fixed) << dA[m][n] << '\t';
    }
return 0;
}

Все работает корректно на Visual studio. Однако при переносе в другую среду разработки и использовании компилятора MinGW на консоль и в файл выводятся числа без дробной части. Вот код для MinGW:

#include <iostream>
#include <vector>
#include <cmath>
#include <clocale>
#include <cstring>
#include <stdio.h>
#include <iomanip>
#include <fstream>
using namespace std;
int main() {
char *locale = setlocale(LC_ALL, "russian");
cout
    << "Введите 6 строк массива А. Каждая строка состоит из 4 вещественных чисел, разделенных пробелом." << endl
    << "Ожидание ввода..." << endl;

const int M = 6, N=4;
char A[1000];
double dA[M][N]{};
for (int i = 0; i < M; i++) {
    gets(A);
    char *strnum = strtok(A, " ");
    int j = 0; 
    while (strnum != NULL)
    {
        dA[i][j] = atof(strnum);
        j++;
        strnum = strtok(NULL, " ");
    }
}
cout << endl;
for (int m = 0; m < M; m++) {
    for (int n = 0; n < N; n++) {
    cout << setprecision(2) << setiosflags(ios::fixed) << dA[m][n] << '\t';
    }
return 0;
}

При вводе матрицы, к примеру:

"1,01 1,2 4,5 4,1"
"1,7 1,1 1,1 0,01"
"1,7 1,1 1,1 0,01"
"1,7 1,1 1,1 0,01"
"1,7 1,1 1,1 0,01"
"1,7 1,1 1,1 0,01"

MinGW выводит:

  1.00 1.00 4.00 4.00
  1.00 1.00 1.00 0.00
  1.00 1.00 1.00 0.00
  1.00 1.00 1.00 0.00
  1.00 1.00 1.00 0.00
  1.00 1.00 1.00 0.00

Как это исправить? Спасибо за помощь.

READ ALSO
Как в масив строк добавить ещё одну

Как в масив строк добавить ещё одну

Всё не так просто как кажется =) Есть переменная It, так вот её нужно вставить вместо The body of the message starts here\r\n Вот код =)

148
Помогите решить задачу 763 [закрыт]

Помогите решить задачу 763 [закрыт]

На бесконечной вправо и вверх шахматной доске находится ладьяДва игрока передвигают ее по очереди

157
Не знаю, как вывести максимальное число подпоследовательностей

Не знаю, как вывести максимальное число подпоследовательностей

Это задание: вводится последовательность целых чиселОпределить количество элементов в наиболее длинной подпоследовательности подряд идущих...

130
Зачем указателю нужно знать, какой тип хранится по адресу?

Зачем указателю нужно знать, какой тип хранится по адресу?

Собственно, зачем мы пишем тип данных перед объявлением переменной-указателя? Если указатели хранят адрес ячейки, то какое им дело, что лежит...

152