Форум программистов, компьютерный форум CyberForum.ru

Выводится в файл только первый символ строки, остальные пустые - C++

Восстановить пароль Регистрация
 
Vadim_H
44 / 3 / 0
Регистрация: 09.07.2014
Сообщений: 37
18.08.2014, 09:46     Выводится в файл только первый символ строки, остальные пустые #1
Есть код обработчика нажатия.По идее,ставя точки останова и проверяя значения все значения получаются правильно.Но при выводе в файл эти 5 строк работают некорректно:
C++
1
2
3
4
5
 fprintf(stream, "%s\n", ((TRadioButton*)R8_GroupBox1->Controls[i])->Caption);
 fprintf(stream, "%s\n", R8_Edit1->Text.c_str());
 fprintf(stream, "%s\n", R8_Edit2->Text.c_str());
 fprintf(stream, "%s\n", R8_Edit3->Text.c_str());
 fprintf(stream, "%s\n", IntToStr(n));
первая строка выводит вообще абракадабру.а остальные 4 только первый символ.В чем может быть проблема?
Видел похожую тему Printf выводит только первый символ,но мне не помогло (работаю в RAD studio XE4,лицензия).При том эта часть кода
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (sechenie=1;sechenie<=n;sechenie++)
    {
    if(sechenie==n) li = ln;
    else li = l1+100*(sechenie-1);
    fprintf(stream, "%i %7.2f %7.2f %7.2f %7.2f\n",
    li, A1[0][sechenie], A2[0][sechenie],A3[0][sechenie],A4[0][sechenie]);
//     X[4][0][sechenie], X[5][0][sechenie],X[6][0][sechenie], X[7][0][sechenie]);
 
     }
    fprintf(stream, "\n%7.2f %7.2f %7.2f\n", // убран перевод строки - как в файле
     //B[0], B[1],B[2]
     X[1][0][1],X[2][0][1],X[3][0][1]);
    fprintf(stream, "\n%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
     B7, B8,Bnko,Bnpo,Bpko,Bppo);
работает адекватно
Привожу полный код,всю программу к сожалению выложить не имею возможности
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
void __fastcall TMain::R1_Button7Click(TObject *Sender)
{
TProgressBar* pb;
TButton* tb = (TButton*)Sender;
int tab = M_PageControl->ActivePageIndex;
/* TODO : протокол (подготовка)  */
 
switch(tab)
{
case 1:
 pb = R1_ProgressBar1;
break;
 
case 2:
break;
 
case 3:
 pb = R3_ProgressBar1;
break;
 
case 4:
 pb = R4_ProgressBar1;
break;
 
case 5:
break;
 
case 6:
break;
 
case 7:
 pb = R7_ProgressBar1;
 
 
break;
 
case 8:
 pb = R8_ProgressBar1;
 if(!prtcl_flag[tab-1])
 {
 /* создание файла результатов KDAN_kSB.TXT */
    stream=fopen("KDAN_kSB.TXT","w+t");
   if(stream){
 
   int i;
  for ( i= 0; i < R8_GroupBox1->ControlCount; i++)
      if(((TRadioButton*)R8_GroupBox1->Controls[i])->Checked) break;
 
 fprintf(stream, "%s\n", ((TRadioButton*)R8_GroupBox1->Controls[i])->Caption);
 fprintf(stream, "%s\n", R8_Edit1->Text.c_str());
 fprintf(stream, "%s\n", R8_Edit2->Text.c_str());
 fprintf(stream, "%s\n", R8_Edit3->Text.c_str());
 fprintf(stream, "%s\n", IntToStr(n));
 
    for (sechenie=1;sechenie<=n;sechenie++)
    {
    if(sechenie==n) li = ln;
    else li = l1+100*(sechenie-1);
    fprintf(stream, "%i %7.2f %7.2f %7.2f %7.2f\n",
    li, A1[0][sechenie], A2[0][sechenie],A3[0][sechenie],A4[0][sechenie]);
//     X[4][0][sechenie], X[5][0][sechenie],X[6][0][sechenie], X[7][0][sechenie]);
 
     }
    fprintf(stream, "\n%7.2f %7.2f %7.2f\n", // убран перевод строки - как в файле
     //B[0], B[1],B[2]
     X[1][0][1],X[2][0][1],X[3][0][1]);
    fprintf(stream, "\n%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n",
     B7, B8,Bnko,Bnpo,Bpko,Bppo);
 
 
  fclose (stream);
  }
}
break;
}
 
 if(prtcl_flag[tab-1]) view_prtcls(tab);
 else {
  if(make_prtcls(tab, pb)) {tb->Caption = "Просмотр протокола";prtcl_flag[tab-1]=1;}
 }
 
 
 
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2014, 09:46     Выводится в файл только первый символ строки, остальные пустые
Посмотрите здесь:

C++ Имеется текстовый файл. Напечатать первый символ первой строки
как освободить только первый элемент массива, не трогая остальные? C++
Вывод списка объектов. Выводится только ссылка на первый элемент C++
C++ Дан текстовый файл. Напечатать первый символ каждой строки
Вывод переменных типа char: правильно выводится только первый символ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrej
И целого heap'а мало
 Аватар для Andrej
93 / 54 / 9
Регистрация: 31.07.2014
Сообщений: 293
18.08.2014, 12:30     Выводится в файл только первый символ строки, остальные пустые #2
Цитата Сообщение от Vadim_H Посмотреть сообщение
R8_Edit1->Text.c_str()
Как костыль, может скопировать это дело в буффер как си строку. И '\0' в конце самостоятельно поставить.
А ещё лучше в дебаггере погонять.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
18.08.2014, 13:02     Выводится в файл только первый символ строки, остальные пустые #3
Цитата Сообщение от Vadim_H Посмотреть сообщение
((TRadioButton*)R8_GroupBox1->Controls[i])->Caption)
Как вы вообще пришли к этому?
Цитата Сообщение от Vadim_H Посмотреть сообщение
только первый символ.В чем может быть проблема?
В том, что fprintf не работает с юникодом. Первый символ она обрабатывает, но дальше у нее плавятся мозги.
Или в свойствах проекта выключите юникод по умолчанию, либо вручную работайте именно с анси строками:
C++
1
fprintf( stream, "%s\n", static_cast<AnsiString>( R8_GroupBox1->Items->Strings[i] ) );
Vadim_H
44 / 3 / 0
Регистрация: 09.07.2014
Сообщений: 37
18.08.2014, 13:52  [ТС]     Выводится в файл только первый символ строки, остальные пустые #4
Решил проблему следующим образом:
C++
1
2
3
4
5
fwprintf(stream, L"%s\n", ((TRadioButton*)R8_GroupBox1->Controls[i])->Caption);
 fwprintf(stream, L"%s\n", R8_Edit1->Text.c_str());
 fwprintf(stream, L"%s\n", R8_Edit2->Text.c_str());
 fwprintf(stream, L"%s\n", R8_Edit3->Text.c_str());
 fwprintf(stream, L"%s\n", IntToStr(n));
Программа не моя,мне дали код с целью внести кое-какие правки.Ей богу,лучше самому писать с нуля чем ковырять чужой код,который по ходу дела писался не одним человеком до меняНо выбора нет,как-то так)
Yandex
Объявления
18.08.2014, 13:52     Выводится в файл только первый символ строки, остальные пустые
Ответ Создать тему
Опции темы

Текущее время: 15:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru