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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.79
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
#1

getchar - C++

28.11.2010, 18:47. Просмотров 5218. Ответов 38
Метки нет (Все метки)

Не пойму почему 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
Посмотрите здесь:

getchar () - C++
a = getchar (); if ( a == 'q' ) // действие 1 a = getchar (); if ( a == 'w' ) // действие 2 Почему не работает такая...

Функция getchar! - C++
Здравствуйте, поясните на пальцах, что делает данная программа? #include &lt;stdio.h&gt; int main(void) { char ch; printf(&quot;Enter...

Getline, getchar - C++
Подскажите пожалуйста, как я поняла getline это шаблон функции, который построчно извлекает строки из выходного потока, но что делается...

Функция getchar() в С++ - C++
#include &lt;iostream&gt; // для оператора cout #include &lt;cctype&gt; // для функции islower #include &lt;cmath&gt; //для математич. вычислений ...

[C++] аналог getchar() - C++
привет ВСЕМ, ЗАДАЧА: Найти периметр и площадь равнобедренной трапеции с основаниями a и b (a &gt; b) и углом alpha при большем основании...

getchar() в linux - C++
Здравствуйте! Я создал небольшую консольную программу. Сначала мне нужно ввести данные с помощью cin и нажать Enter. Сразу после cin у меня...

Getchar и putchar EOF - C++
Подскажите что за символ такой EOF? Чисто догадываясь это 0, но не работает. #include &lt;stdio.h&gt; int main() { int c; while((c...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.11.2010, 22:17     getchar #16
go,
C++
1
ch!='EOF'
Угу. Прям так. Три символа как один. Шикарно.
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++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
28.11.2010, 23:05     getchar #18
Цитата Сообщение от Lotles Посмотреть сообщение
10 это одно и тоже
да 10
я бы лучше писал ch!=EOF
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
28.11.2010, 23:38  [ТС]     getchar #19
Цитата Сообщение от go Посмотреть сообщение
да 10
я бы лучше писал ch!=EOF
Ну напишешь ты EOF и что
цикл будет бесконечен и getchar() всегда будет просить ввести строку
Мне это не нужно
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
28.11.2010, 23:47     getchar #20
getchar() всегда будет просить ввести строку
getchar() как бэ символ просит ввести, а не строку.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.11.2010, 23:55     getchar #21
C++
1
2
3
4
    int ch;
 
    for (int i = 0; i < nsclen && (ch = getchar()) != '\n' && ch != EOF; i++)
        new_str_cop[i] = ch;
если ты в теле ставишь getchar(), то он может прочитать '\n' или вообще не прочитать ничего EOF, а потом записывает это в массив
int делается, чтобы программа не путала символ 0xFF и константу EOF
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
29.11.2010, 00:32  [ТС]     getchar #22
getchar() как бэ символ просит ввести, а не строку.
getch() просит ввести символ, а getchar()-строку, ну можно и символ ввести

Добавлено через 17 минут
accept
что такое nsclen
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.11.2010, 00:38     getchar #23
Lotles, getchar
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
29.11.2010, 00:41  [ТС]     getchar #24
Я и так знаю(потому что я проверял) с помощью getchar() можно ввести строку но считывает и возвращает он 1 символ и читает он пока не найдет символ 10 включительно
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.11.2010, 00:43     getchar #25
Lotles, Угу. Буферизованный ввод это называется.
Ввод идет до тех пор пока не будет получен символ перевода на новую строку - дальше из буфера береться по одному символу.
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
29.11.2010, 00:52  [ТС]     getchar #26
for (int i = 0; i < nsclen && (ch = getchar()) != '\n' && ch != EOF; i++)
Что такое nsclen у меня это вообще не робит

Или скажите в чем ошибка(в главном коде)
Lotles, Угу. Буферизованный ввод это называется.
Ввод идет до тех пор пока не будет получен символ перевода на новую строку - дальше из буфера береться по одному символу.
почему символ перевода на новую строку, я проводил эксперимент это был символ конца строки-10
Vorox
25 / 24 / 3
Регистрация: 26.11.2010
Сообщений: 57
Завершенные тесты: 1
29.11.2010, 00:53     getchar #27
Цитата Сообщение от Lotles Посмотреть сообщение
C++
1
2
3
4
5
6
char ch=0;
 for (int i=0;ch!=10;i++)
{ 
char ch=getchar();
 new_str_cop[i]=ch;
 }
Думаю переобъявление ch в четвертой строчке явно лишнее
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
29.11.2010, 01:00  [ТС]     getchar #28
Блин какая глупая ошибка
Молодец !
Ошибки нет, а почему getchar() просил ввести символ я так и не понял
ну хотя догадываюсь
C++
1
2
char ch=0;
 for (int i=0;ch!=10;i++)
Идет проверка этого ch те ch=0
А чо это 2 разных переменныъ в памяти размещ-ся с одним именем
Так ?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.11.2010, 01:11     getchar #29
Lotles, Локальная переменная цикла перекрывала локальную переменную функции.
Т.е.

C++
1
2
3
4
5
6
char ch=0;//Локальная переменная функции
 for (int i=0;ch!=10;i++)//Сравнивается локальная переменная функции
{ 
char ch=getchar();//Перекрываем локальную переменную функции. + каждый раз определяем эту переменную снова
 new_str_cop[i]=ch;
 }
В итоге ch который сравнивается в цикле так и оставался нулем.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2010, 01:18     getchar
Еще ссылки по теме:

как работает getchar() ? - C++
int c; c=getchar(); cout &lt;&lt; c; Набираю на клаве число 123 Cout выдает число 49 ??? Добавлено через 1 минуту из-за нажатия...

функции getchar() и putchar() - C++
Здравствуйте всем. Такая вот задачка: Есть вот такой код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; ...

Уточнение как работает getchar(); - C++
Я ввёл 4 символа в оператор getchar(); и нажал &lt;Enter&gt;. Количество введённый символов получается 5? В смысле &lt;Enter&gt; это же символ...

Массив: функции getchar и putchar - C++
Задан массив. «Фамилия_стаж работы_зарплата». Преобразовать массив так: стаж работы увеличить на год, если он станет равен 10, то зарплату...

Почему-то перестал работать getchar() - C++
Чтобы окно после выполнения программы сразу не закрывалось, я использовала getchar(). Теперь же он не срабатывает, программа закрывается и...


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

Или воспользуйтесь поиском по форуму:
Vorox
25 / 24 / 3
Регистрация: 26.11.2010
Сообщений: 57
Завершенные тесты: 1
29.11.2010, 01:18     getchar #30
Цитата Сообщение от Lotles Посмотреть сообщение
почему getchar() просил ввести символ я так и не понял
1.Ты заходишь в цикл компилятор видит что ch обьявлена заранее (ошибки нет)
2. В цикле ты обьявляешь новый!!! ch. Затем выходим из цикла: происходит разрушение нового!!! ch
3.Заходим опять в цикл и проверяем ch обьявленную заранее, т.е. =0, на предмет равенства(бесконечный цикл однако)
Yandex
Объявления
29.11.2010, 01:18     getchar
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru