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

Не могу заставить правильно посчитать символы (strlen) - C++

Восстановить пароль Регистрация
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
26.02.2014, 00:14     Не могу заставить правильно посчитать символы (strlen) #1
Здравствуйте.
Помогите, пожалуйста. Код и вывод на скриншоте. Обратите внимание, что стоит проверка (см. комментарий) - вот там и считает неправильно. То есть, почему strlen(tempname) выдает меньше символов, чем ввел?
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstring>
 
const int slen = 30;
 
struct student {
        char fullname[slen];
        char hobby[slen];
        int ooplevel;
};
 
int getinfo(student*, short int*);
// void display1(student);
// void display2(const student*);
// void display3(const student*, int);
 
int main() {
        short int class_size;
        std::cout << "Enter class size: ";
        std::cin >> class_size;
        while (std::cin.get() != '\n')
                continue;
        student* ptr_stu = new student[class_size];
        int entered = getinfo(ptr_stu, &class_size);
        /* for (int i = 0; i < entered; i++) {
                display1(ptr_stu[i]);
                display2(&ptr_stu[i]);
        }
        display3(ptr_stu, entered); */
        delete [] ptr_stu;
        std::cout << "Done\n";
        return 0;
}
 
int getinfo(student* st, short int* p_class_size) {
        short int st_to_add = -1;
        const short int templen = 100;
        char tempname[templen];
        while(true) {
                std::cout << "How many students you want to add?\n";
                std::cin >> st_to_add;
                if (st_to_add > *p_class_size) {
                        std::cout << "Too much students you want to add!\nRepeat! ";
                }
                else {
                        while(st_to_add) {
                                std::cout << "Enter fullname\n";
                                std::cin.getline(tempname, templen);
                                std::cin.get();
                                std::cout <<"=STRLEN->"<<strlen(tempname)<<"<-STRLEN="; //CHECK THIS OUT!!!!
                                if (strlen(tempname) > slen) {
                                        std::cout << "Too big fullname\n";
                                        continue;
                                }
                                else {
                                        strcpy(st->fullname,tempname);
                                        --st_to_add;
                                }
                        }
                }
                break;
        }
}
Миниатюры
Не могу заставить правильно посчитать символы (strlen)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2014, 00:14     Не могу заставить правильно посчитать символы (strlen)
Посмотрите здесь:

C++ Не получается чтобы он все символы с текста читал и типа счетчика который считает одинаковые символы как один и плюсует их....Как сделать правильно???
FindRersource API не могу заставить работать C++
C++ посчитать символы
C++ нужно посчитать опреденные символы в строках
C++ не могу понять задачку. Даны натуральное число n и символы s1, s2,., sn. Получить символы, принадлежащие последовательности s1, s2,., sn, которые
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
26.02.2014, 02:36     Не могу заставить правильно посчитать символы (strlen) #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
26
27
28
29
30
31
32
33
34
35
36
int getinfo(student* st, short int* p_class_size)
{
    short int st_to_add = -1;
    const short int templen = 100;
    char tempname[templen];
    while(true)
    {
        std::cout << "How many students you want to add?\n";
        std::cin >> st_to_add;
        std::cin.ignore();
        if (st_to_add > *p_class_size)
        {
            std::cout << "Too much students you want to add!\nRepeat! ";
        }
        else
        {
            while(st_to_add)
            {
                std::cout << "\nEnter fullname\n";
                std::cin.getline(tempname, templen);
                std::cout <<"=STRLEN->"<<strlen(tempname)<<"<-STRLEN="; //CHECK THIS OUT!!!!
                if (strlen(tempname) > slen)
                {
                    std::cout << "Too big fullname\n";
                    continue;
                }
                else
                {
                    strcpy(st->fullname,tempname);
                    --st_to_add;
                }
            }
        }
        break;
    }
}
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
26.02.2014, 12:26  [ТС]     Не могу заставить правильно посчитать символы (strlen) #3
DrOffset, еще не учил istream::ignore. Спасибо; а что там надо игнорировать то?
DrOffset
6424 / 3798 / 879
Регистрация: 30.01.2014
Сообщений: 6,591
26.02.2014, 12:36     Не могу заставить правильно посчитать символы (strlen) #4
Цитата Сообщение от andrejap Посмотреть сообщение
а что там надо игнорировать то?
Символы в потоке, которые ты только что ввел. Там ведь буфер
Yandex
Объявления
26.02.2014, 12:36     Не могу заставить правильно посчитать символы (strlen)
Ответ Создать тему
Опции темы

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