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

Некорректный вывод строки - C++

Восстановить пароль Регистрация
 
bestpalyer1
-1 / 1 / 0
Регистрация: 20.12.2012
Сообщений: 47
07.02.2013, 14:31     Некорректный вывод строки #1
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
#include <iostream>
#include <string>
#include <cstring>
#include <windows.h>
#include <limits>
using namespace std;
 
 
char**form(int n)
{
char**mas=new char*[n];
char *w=new char[20];
int i;
for(int i=0;i<n;i++)
mas[i]=new char[20];
 
for(i=0;i<n;i++)
{
cout << "\n" << "Введите имя и фамилию №" << i+1 << "(через пробел):" << "\n";
cin.ignore();
gets(w);
strcpy(mas[i],w);
w[0]='\0';
}
 
return mas;
}
 
 
double*snach(int n)
{
double*mas=new double[n];
for(int i=0;i<n;i++)
{
cout<<"Рейтинг №" << i+1 << ":";
cin>>mas[i];
}
cout<<"\n";
return mas;
}
 
 
void pechat(int n,char**famely,double*reiting)
{
    for(int i=0;i<n;i++)
    {
    cout << famely[i] << "\t"<< reiting[i] << "\n";
    }
}
 
 
void main()
{
 
setlocale(LC_ALL,"RUS");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
int n;
cout<<"Введите количество человек:";
cin>>n;
 
while (n<=0 || n>10)
{
    cout << "Введите повторно:";
    cin >> n;
}
 
double*reiting;
char**famely,**firstname;
famely=form(n);
reiting=snach(n);
pechat(n,famely,reiting);
}




Пример:
ввод:
Иван Петров
Петр Сидоров
Степан Сибирский
вывод:
Иван Петров
етр Сидоров
епан Сибирский


В чем ошибка? 9-27 строки.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 14:31     Некорректный вывод строки
Посмотрите здесь:

Структуры, некорректный вывод C++
Некорректный вывод текста C++
C++ Некорректный вывод в Borland 3.1
C++ Некорректный вывод
некорректный вывод программы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
07.02.2013, 17:43     Некорректный вывод строки #2
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
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
void print (string x)
{
    cout << x << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
    vector <string> v;
    string x_tmp,x_tmp_plus;
    while ( cin >>x_tmp, x_tmp != "endl")
    {
        cin >> x_tmp_plus;
        x_tmp += ' ';
        x_tmp += x_tmp_plus;
        v.push_back(x_tmp);
    }   
    cout <<endl;
    reverse(v.begin(), v.end());
    for_each(v.begin(), v.end(), print);
    return 0;
}
уважаемые эксперты, как можно ещё оптимизировать код?

Добавлено через 1 минуту
и ещё вопрос у меня была идея сделать через цикл, но в обратном порядке, но это не stl.
есть ли for_each только в обратную сторону?
Пёс
 Аватар для Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
07.02.2013, 17:45     Некорректный вывод строки #3
Цитата Сообщение от Van111 Посмотреть сообщение
уважаемые эксперты, как можно ещё оптимизировать код?

Добавлено через 1 минуту
и ещё вопрос у меня была идея сделать через цикл, но в обратном порядке, но это не stl.
есть ли for_each только в обратную сторону?
Я не эксперт, но я думаю этот виндовый шлак надо заменить на стандарт.

C++
1
int _tmain(int argc, _TCHAR* argv[])
HighPredator
 Аватар для HighPredator
5342 / 1725 / 320
Регистрация: 10.12.2010
Сообщений: 5,107
Записей в блоге: 3
07.02.2013, 17:58     Некорректный вывод строки #4
Цитата Сообщение от Пёс Посмотреть сообщение
но я думаю этот виндовый шлак надо заменить на стандарт.
Это не шлак, и тем более не виндовый. Такое определение главной функции делается для потенциальной поддержки передачи юникодовых символов в качестве параметров командной строки при соответствующих настройках.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 18:04     Некорректный вывод строки #5
HighPredator, Это же из tchar, если не ошибаюсь. А tchar - это мелкософтовская поделка и присутствует только на винде

Добавлено через 2 минуты
Что касается for_each, то может стоит реверс итераторы взять?
HighPredator
07.02.2013, 18:06
  #6

Не по теме:

Croessmah, точно. Попутал. Помню железно, что wmain - MS-ная, вот и подумал, что это не от них.

Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
07.02.2013, 18:07     Некорректный вывод строки #7
Цитата Сообщение от Пёс Посмотреть сообщение
int _tmain(int argc, _TCHAR* argv[])
это называется - я пишу на MVC 2010

Добавлено через 21 секунду
Цитата Сообщение от Croessmah Посмотреть сообщение
Что касается for_each, то может стоит реверс итераторы взять?
можно подробнее?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
07.02.2013, 18:23     Некорректный вывод строки #8
Van111, это называется не пишу на vc, а пишу для windows. Винда поддерживает wchar_t пути к файлам.
Относиельно итераторов, с телефона пример написать не могу, но можете поискать на тему "c++ stl алгоритмы" должно быть описание реверс итераторов
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.02.2013, 18:32     Некорректный вывод строки #9
Цитата Сообщение от Van111 Посмотреть сообщение
C++
1
2
reverse(v.begin(), v.end());
for_each(v.begin(), v.end(), print);
C++
1
std::copy(v.rbegin(), v.rend(), std::ostream_iterator<std::string> (std::cout, " ") );
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.02.2013, 18:36     Некорректный вывод строки #10
Цитата Сообщение от HighPredator Посмотреть сообщение
Это не шлак, и тем более не виндовый.
Если про это:
Цитата Сообщение от Пёс Посмотреть сообщение
int _tmain(int argc, _TCHAR* argv[])
то как же это ещё назвать?
Цитата Сообщение от HighPredator Посмотреть сообщение
Такое определение главной функции делается для потенциальной поддержки передачи юникодовых символов в качестве параметров командной строки при соответствующих настройках.
Скорее это мелкомягкие, как всегда, своим непростым путём пошли...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
int main(int argc, char ** argv) {
    wchar_t name[BUFSIZ];
    mbstate_t ps;
    
    setlocale(LC_ALL, "ru_RU.UTF-8");
    mbsrtowcs(name, (const char**)&argv[1], BUFSIZ, &ps);
    printf("Привет, %ls!\n", name);
    
    return 0;
}
Код
[andrew@andrew strings]$ gcc -o whello whello.c 
[andrew@andrew strings]$ ./whello Вася
Привет, Вася!
[andrew@andrew strings]$

Не по теме:

Тьфу, ты... На минутку отвлёкся, а тут уже - хоть в отдельную тему переноси.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.02.2013, 19:08     Некорректный вывод строки
Еще ссылки по теме:

C++ Некорректный вывод
Некорректный вывод C++
C++ Некорректный вывод в файл

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
HighPredator
07.02.2013, 19:08     Некорректный вывод строки
  #11

Не по теме:

Цитата Сообщение от easybudda Посмотреть сообщение
то как же это ещё назвать?
Был очень неправ. Исправлюсь

Yandex
Объявления
07.02.2013, 19:08     Некорректный вывод строки
Ответ Создать тему
Опции темы

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