Yoko

All sides of Injection
It is currently 2024-04-26 17:04:15

All times are UTC+02:00




Post new topic  Reply to topic  [ 26 posts ]  Go to page 1 2 Next
Author Message
 Post subject: C++ и ASCII коды
PostPosted: 2006-11-14 18:02:40 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Собственно вопрос в следущем.
Есть код лаб. работы, которая берёт из файла данные и заносит их в таблицу в другой файл:

Что берём:

Code:
                        ИСХОДНЫЕ   ДАННЫЕ
╔══════════╤══════════╤══════════╤══════════╤══════════╤══════════╗
║ ДАННЫЕ 1 │ ДАННЫЕ 2 │ ДАННЫЕ 3 │ ДАННЫЕ 4 │ ДАННЫЕ 5 │ ДАННЫЕ 6 ║
╠══════════╪══════════╪══════════╪══════════╪══════════╪══════════╣
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
╚══════════╧══════════╧══════════╧══════════╧══════════╧══════════╝
1.34        33.5        312        44        -1.0E-3        46 
56.89        4.32        7.e-2        67        450        14.85
67        4        -3.879        3.2        -436        67
0.2        6.4        -44        1.23        0.55        1.2E-3
1.578        0.25        4.5        0.45        -5.44        2.36

Что получается:
Code:
                        ИСХОДНЫЕ   ДАННЫЕ
╔══════════╤══════════╤══════════╤══════════╤══════════╤══════════╗
║ ДАННЫЕ 1 │ ДАННЫЕ 2 │ ДАННЫЕ 3 │ ДАННЫЕ 4 │ ДАННЫЕ 5 │ ДАННЫЕ 6 ║
╠══════════╪══════════╪══════════╪══════════╪══════════╪══════════╣
1.34      33.5      3.12e+02  44        -0.001    46       
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
56.89     4.32      7e-02     67        450       14.85     
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
67        4         -3.879e+003.2       -436      67       
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
0.2       6.4       -4.4e+01  1.23      0.55      0.0012   
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
1.578     0.25      4.5e+00   0.45      -5.44     2.36     
╚══════════╧══════════╧══════════╧══════════╧══════════╧══════════╝


Собственно код программы выводит шапку таблицы, затем содержимое через символы с кодом │ и в конце каждой строки с данными массива по идее ставит ║.

Проблема вот в чём:
Не выводит в файле эти 2а символа.В начале строки должен быть символ-он игнорируется пустым местом,между элементами и в конце также. Ни 10,ни 8, ни 16 ричный код этих символов С++ выводить не хочет, однако совсем остальным проблем нет, и забитую по стандарту шапку имеющую такие символы выводит без проблем.

В чём мб проблема? Кодировка тхт файла может влиять или еще что?


Top
   
 Post subject:
PostPosted: 2006-11-14 18:10:41 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Да простит меня цензура, но если подставить не эти 2 кода, а какое нибудь слово на их место то результат на лицо ...
Code:
                        ИСХОДНЫЕ   ДАННЫЕ
╔══════════╤══════════╤══════════╤══════════╤══════════╤══════════╗
║ ДАННЫЕ 1 │ ДАННЫЕ 2 │ ДАННЫЕ 3 │ ДАННЫЕ 4 │ ДАННЫЕ 5 │ ДАННЫЕ 6 ║
╠══════════╪══════════╪══════════╪══════════╪══════════╪══════════╣
gavno1.34      gavno33.5      gavno3.12e+02  gavno44        gavno-0.001    gavno46        gavno
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
gavno56.89     gavno4.32      gavno7e-02     gavno67        gavno450       gavno14.85     gavno
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
gavno67        gavno4         gavno-3.879e+00gavno3.2       gavno-436      gavno67        gavno
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
gavno0.2       gavno6.4       gavno-4.4e+01  gavno1.23      gavno0.55      gavno0.0012    gavno
╟──────────┼──────────┼──────────┼──────────┼──────────┼──────────╢
gavno1.578     gavno0.25      gavno4.5e+00   gavno0.45      gavno-5.44     gavno2.36      gavno
╚══════════╧══════════╧══════════╧══════════╧══════════╧══════════╝


Top
   
 Post subject:
PostPosted: 2006-11-14 19:06:50 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Код выложи. Я тогда у папы спрошу.

ЗЫ: А не перле нельзя?

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-11-14 19:24:22 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Нет. Это моя лаб. работа. Сейчас код кину ...


Top
   
 Post subject:
PostPosted: 2006-11-14 19:25:51 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Code:
#include<fstream.h>
#include<stdlib.h>
#include<conio.h>
#include<iomanip.h>

const int m=5, n=6;
ifstream fin;
ofstream fout;
char c[6][202];

void main()
 {clrscr();
  fin.open("gg.txt"); # Откуда берём информацию
  if(!fin) {cout<<"Error when file was opening for reading"; exit(1);}

  fout.open("gg.res"); # Куда записываем
  if(!fout) {cout<<"Error when file was open for record";exit(1);}

 float a[m][n];
 int i,j;

 void vvod(float a[m][n]);
 void p(float a[m][n]);
 vvod(a);
 p(a);
 fout.close();
}


void vvod(float a[m][n])
{
  int i,j;
   for(i=0;i<6;i++)
    {

     fin.getline(c[i],203);
     if(i<4)
      fout<<c[i]<<endl;
    }
     for(i=0;i<m;i++)
     for(j=0;j<n;j++)
     fin>>*(*(a+i)+j);
     fin.close();
}

  void p(float a[m][n])
  {
   int i,j;
   for(i=0;i<m;i++)
   {
    fout<<'\xBA'; # ║ -не выводит
    for(j=0;j<n;j++)
    switch(j)
     { case 0: case 1: case 3: case 4:
      fout.width(10);
      fout.setf(ios::left|ios::fixed);
      fout.precision(5);
      fout<<a[i][j]<<'\xB3'; # | -не выводит
      break;
      case 2:
      fout.width(10);
      fout.setf(ios::scientific);
      fout.precision(4);
      fout<<a[i][j];fout<<'\xB3'; # | -не выводит
      break;
      case 5:
      fout.width(10);
      fout.precision(4);
      fout<<a[i][j]<<"\xB3\n"; # | -не выводит
      break;
    }
   if(i==m-1)
    fout<<c[5]<<endl;
   else
    fout<<c[4]<<endl;
  }
 }


Top
   
 Post subject:
PostPosted: 2006-11-14 19:47:12 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
А если просто текстовый вариант этих символов печатать?


Top
   
 Post subject:
PostPosted: 2006-11-14 19:52:39 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Если в коде программы напечатать эти символы ? -Через Alt + 186 (если не ошибаюсь) -выводится символ ║ и как строковая " ║ " в тхт всё равно не записывается =\ остаётся пустым местом.


Top
   
 Post subject:
PostPosted: 2006-11-14 20:17:21 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Хммм:
Code:
fout<<'║'

А так разве не работает?

Если тебе чтото это скажет, то:
Code:
std::ofstream os("somefile.txt");
os << << '║';

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-11-14 20:27:07 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Ничего не говорит =\


Top
   
 Post subject:
PostPosted: 2006-11-14 20:43:31 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Выводит следующим образом:

" | " -как символ OR. Однако мне надо кодом символа. =\ В чём трабла мб?! =\


Top
   
 Post subject:
PostPosted: 2006-11-14 21:18:32 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
Поговори об этом с ваше преподшей, и ей приятно будет что ктото пытается вкурить в ее предмет и тебе голову ломать над пустяками не прийдется. :) Как ее там, Лала вроде, если не ошибаюсь.


Top
   
 Post subject:
PostPosted: 2006-11-14 21:30:40 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
Savage wrote:
Поговори об этом с ваше преподшей, и ей приятно будет что ктото пытается вкурить в ее предмет и тебе голову ломать над пустяками не прийдется. :) Как ее там, Лала вроде, если не ошибаюсь.

Не, не надо. Счас смастерим!
Только я не понял, по заданию тебе обязательно коды ASCII использовать?

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-11-14 21:41:08 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Отклонение в запятую карается смертью на защите лабараторной работе по её предмету.
Если у неё в Методичке указаны коды:
'\263' и '\272' значит так надо. Иначе не засчитает :\ я бы и рад самодеятельностью заняться-да не получится.


Top
   
 Post subject:
PostPosted: 2006-11-14 21:44:17 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
А попробуй '\xBA' на '\xA6' поменяь

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-11-14 21:53:21 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Без результата


Top
   
 Post subject:
PostPosted: 2006-11-14 21:58:00 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
А может 0xBA надо?


Top
   
 Post subject:
PostPosted: 2006-11-14 22:07:07 
Offline

Joined: 2005-04-19 18:00:29
Posts: 2259
Location: Московская область
Savage wrote:
А может 0xBA надо?

Не.

Код символа ║ -это

(186)10 = (272)8 = (BA)16

Соответственно в дестеричной8 и 16 ричной системах счисления.
16рич вид такого кода это '\xHH' -где H это любое число от 0 до 16.
Я пробовал 8,10 и 16 ричные коды записи этого символа в программе но ничего не выходило.

Мб всё таки вопрос в кодировке или чём то еще, не относящемся к С++?


Top
   
 Post subject:
PostPosted: 2006-11-14 22:34:38 
Offline
Expert!
User avatar

Joined: 2004-04-04 11:13:54
Posts: 1205
Location: Балаково, Саратовская обл.
Лень ставить билдер. Наверняка какой-нить пустяк мешает те нормальн отдыхать :)


Top
   
 Post subject:
PostPosted: 2006-11-14 22:46:21 
Offline
Expert!
User avatar

Joined: 2006-02-25 21:48:38
Posts: 1032
ты знаешь, тут кокраз в кодировке может быть дело.
║ - для меня это 2 вертикальные черты.
Когда я делаю ctrl+c на форуме и ctrl+v в far'е, то там у меня получается одна вертикальная черта ( | ) , но не такая, как эта, а другая, но тоже одна и вертикальная. + в зависамости от кодировки (win/dos == win-1251/cp866) шестнадцатиричный код меняется. (A6/B3). Тобишь тебе сначало нужно понять в какой кодировке Си хочет видет код асции. А видеть он хочет коды в кодировке "по умолчанию". Для винды это (стандартно) win-1251.

Вообще, попробуй "пройти" все возможные коды АСКИ и посмотри что тебе выведется на экран.
Code:
for (int i = 0; i <= 255; ++i) {
char c = i;
std::cout << c;
}


-----------------------------------------------------

Кстати, вместо
Code:
fout<<'\xa6';

можно
Code:
fout << char(0xa6);


-----------------------------------------------------
А может ошибка вовсе не в кодировке?
Может ты гже то код напутал?
Мне вот это не нравится (я в си не разбираюсь):
Code:
{ case 0: case 1: case 3: case 4: #почему тут 0,1,3,4 ? почему не по порядку?
      fout.width(10);
      fout.setf(ios::left|ios::fixed);
      fout.precision(5);
      fout<<a[i][j]<<'\xB3'; # | -не выводит
      break;
      case 2:
      fout.width(10);
      fout.setf(ios::scientific);
      fout.precision(4);
      fout<<a[i][j];fout<<'\xB3'; # | -не выводит
      break;
      case 5:
      fout.width(10);
      fout.precision(4);
      fout<<a[i][j]<<"\xB3\n"; # | -не выводит
      break;
    }


ЗЫ: И помни, что 0xA6 и 0хА6 это совсем разные вещи!!!!! ;)

_________________
DerMeister сейчас на нейрале!


Top
   
 Post subject:
PostPosted: 2006-11-15 00:53:34 
Offline
User avatar

Joined: 2005-07-10 21:53:05
Posts: 457
fprintf() не проще использовать?
Пусть компилятор разбирается с кодами символов.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 26 posts ]  Go to page 1 2 Next

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 21 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited