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

getchar - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.79
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
28.11.2010, 18:47     getchar #1
Не пойму почему getchar 2-ой раз запрашивает ввести строку, я же написал в цикле условие, что выполняется, если ch!=10
C++
1
2
3
4
    char ch=0;
    for (int i=0;ch!=10;i++){
        char ch=getchar();
        new_str_cop[i]=ch;
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
#include "stdafx.h"
#include <conio.h>
using namespace std;
char* new_str_cop=new char[50];
void copy(){
    char ch=0;
    for (int i=0;ch!=10;i++){
        char ch=getchar();
        new_str_cop[i]=ch;
    }
    new_str_cop[i]='\0';
}
void editing(){
    int j=0;
    char* new_str_ed=new char[50];
    for(int i=0;i<strlen(new_str_cop);i++){
        if (new_str_cop[i]==9){
            new_str_ed[j]='T';
            j++;
        }
        if (new_str_cop[i]==8){
            new_str_ed[j]='B';
            j++;
        }
        else
            new_str_ed[j]=new_str_cop[i];
        j++;
    }
        cout << new_str_ed << endl;
    }
 
 
 
    void main(){
        __asm int 3;
        copy();
        editing();
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2010, 18:47     getchar
Посмотрите здесь:

C++ getchar ()
[C++] аналог getchar() C++
C++ Getchar и putchar EOF
C++ Функция getchar!
Массив: функции getchar и putchar C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.11.2010, 18:50     getchar #2
Lotles, Э. А вы понимаете чей ASCII код = 10?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
28.11.2010, 18:59     getchar #3
Цитата Сообщение от Lotles Посмотреть сообщение
char ch=0;
* * * * for (int i=0;ch!=10;i++){
* * * * * * * * char ch=getchar();
* * * * * * * * new_str_cop[i]=ch;
а зачем в вашем алгоритме здесь i
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
28.11.2010, 19:05     getchar #4
Цитата Сообщение от go Посмотреть сообщение
а зачем в вашем алгоритме здесь i
так массив же заполнять, i нужна для индексации указателя.

Добавлено через 49 секунд
а вот эту строчку я реально не понял
C++
1
__asm int 3;
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
28.11.2010, 19:11     getchar #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
а вот эту строчку я реально не понял
__asm int 3;
чего не понятного? дебажит чувак таким извращенным способом.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
28.11.2010, 19:13     getchar #6
slice, а по-подробней?
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
28.11.2010, 19:17     getchar #7
почти что то же самое что брэкпоинт поставить
int - это не integer а interrupt
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
28.11.2010, 19:21     getchar #8
да, уже дошло) А разве консоль Win32 поддерживает прерывания BIOS ? Или они там эмулируются?
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
28.11.2010, 19:21     getchar #9
не знаю
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
28.11.2010, 19:24     getchar #10
все понял, я туплю)

Добавлено через 2 минуты
Цитата Сообщение от slice Посмотреть сообщение
не знаю
Да, они там эмулируются, винда то не даст прерывания генерировать.

Не по теме:

прочитал твое сообщение до редактирования - это было кому то адресованно?

slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
28.11.2010, 19:26     getchar #11
мысли вслух
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
28.11.2010, 19:38     getchar #12
Lotles, вы очевидно пытаетесь отловить нажатие кнопки "enter" ? вот кусок файла WinUser.h, где определены все клавиши:
C++
1
2
3
4
5
6
7
8
9
#define VK_BACK           0x08
#define VK_TAB            0x09
 
/*
 * 0x0A - 0x0B : reserved
 */
 
#define VK_CLEAR          0x0C
#define VK_RETURN         0x0D
похоже enter недоступна, такое можно реализовать через низкоуровневые ф-ции I/O API.
или попробовать так:
C++
1
for (int i=0;ch!='\n';i++)
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
28.11.2010, 20:52  [ТС]     getchar #13
Я не хочу нажатие Enter отловить, мне надо скопировать строку в new_str_cop из строки, которую я ввел с помощью getchar(), и понять почему работает не так, как я думаю
Пжт тока не надо свои алгоритмы придумывать, мне интересно почему здесь не работает
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
28.11.2010, 21:01     getchar #14
Цитата Сообщение от Lotles Посмотреть сообщение
Я не хочу нажатие Enter отловить
тогда объясните вот это "ch!=10;", как вы считаете - когда цикл должен прикратится?
И кстати вы пробовали "ch!='\n'" ?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
28.11.2010, 21:06     getchar #15
Цитата Сообщение от Kastaneda Посмотреть сообщение
И кстати вы пробовали "ch!='\n'" ?
C
1
ch!='EOF'
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.11.2010, 22:17     getchar #16
go,
C++
1
ch!='EOF'
Угу. Прям так. Три символа как один. Шикарно.
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
28.11.2010, 22:30  [ТС]     getchar #17
ch!='EOF'
Вы имели ввиду ch!=EOF

Тогда у меня цикл никогда не прекратится, потому что у меня EOF -1, а какой символ соответствует -1- вроде никакой

'\n' и 10 это одно и тоже

C++
1
2
3
4
    for (int i=0;ch!=10;i++){
        char ch=getchar();
        new_str_cop[i]=ch;
    }
допустим getchar() дошла до конца строки и ch=10
Далее опять условие цикла, ch!=10, с какого он дальше идет?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
28.11.2010, 23:05     getchar #18
Цитата Сообщение от Lotles Посмотреть сообщение
10 это одно и тоже
да 10
я бы лучше писал ch!=EOF
Lotles
 Аватар для Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
28.11.2010, 23:38  [ТС]     getchar #19
Цитата Сообщение от go Посмотреть сообщение
да 10
я бы лучше писал ch!=EOF
Ну напишешь ты EOF и что
цикл будет бесконечен и getchar() всегда будет просить ввести строку
Мне это не нужно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2010, 23:47     getchar
Еще ссылки по теме:

getchar() в linux C++
функции getchar() и putchar() C++
как работает getchar() ? C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.11.2010, 23:47     getchar #20
getchar() всегда будет просить ввести строку
getchar() как бэ символ просит ввести, а не строку.
Yandex
Объявления
28.11.2010, 23:47     getchar
Ответ Создать тему
Опции темы

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