Printf и оператор fstream << отображают разные значения. Почему? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь получить значения x и y координат двух глаз. Я обнаруживаю его с помощью файла opencv XML, и в консоли 2 различных значения x появляются из printf(), в то время как текстовый файл, который я сохраняю с помощью operator<<, отображает 1 значение. Почему это так?

printf("X = %o,Y = %o\n", eyes[j].x, eyes[j].y);

ofstream coordinates;
coordinates.open("C:/Users/dougl/Desktop/Coordinates.txt");
coordinates << "X = " << eyes[j].x << "\n" << "Y = " << eyes[j].y;

image

Ответы [ 2 ]

1 голос
/ 16 января 2020
#include <iostream>

using std::cout;
using std::endl;
using std::oct;
using std::hex;

int main()
{
  long int pos_value =  12345678;  

  cout << "The decimal value 12345678 is printed out as" << endl;

  cout << "octal:       " << oct << pos_value << endl;
  cout << "hexadecimal: " << hex << pos_value << endl << endl;

  return 0;
}

Printf, показывающий беззнаковое восьмеричное число для целого числа в формате:% o. https://www.geeksforgeeks.org/format-specifiers-in-c/amp/

Оператор потока << перегрузка работает в соответствии с типом данных переданного значения. Итак, чтобы вывести восьмеричное значение, вам нужно отформатировать (std :: oct): </p>

cout << "octal:       " << oct << pos_value << endl;

Ссылка: http://faculty.cs.niu.edu/~mcmahon/CS241/c241man/node83.html

0 голосов
/ 16 января 2020

Вы говорите printf() выводить целые числа в восьмеричной форме, тогда как operator<< выводит целые числа в десятичной форме по умолчанию.

Чтобы сделать два выхода совпадают, вам необходимо:

  • изменить %o на %d или %u, в зависимости от того, подписаны ли значения x и y или без знака, соответственно.

  • используйте std::oct Манипулятор ввода-вывода с operator<<.

...