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

Вопросы начинающего - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не работают конструкторы.... http://www.cyberforum.ru/cpp-beginners/thread192736.html
Помогите, кому не трудно... Не работают конструкторы наследования (заккоментил подсказки на них...): #include <iostream.h> #include <iomanip.h> #include <string.h> #include <stdio.h> class basecl {
C++ вложенные циклы вывод на экран натуральных чисел лежащих в интервале и делящихся нацело на 5 http://www.cyberforum.ru/cpp-beginners/thread192732.html
C++ Выбросить из записи числа n цифры 0 и 5
Помогите найти ошибку. Дано натуральное число n. Выбросить из записи числа n цифры 0 и 5, оставив прежним порядок остальных цифр. Например из числа 59015509 должно получиться 919. Вот мой код: #include<math.h> #include<stdio.h> int main(){ unsigned long int a,b,i,k; scanf("%d",&a); i=0;
запись в файл C++
Здравствуйте. Написала программу, никак не получается ее переделать так, чтобы записать в файл. Подскажите пожалуйста как ее подправить, чтобы можно было записать в текстовый файл. и еще никак не пойму, когда файл включаешь в программу, его лучше в одну папку с кодом помещать или можно из любого места на диске и поностью прописывать его местонахождение? #include <cstring> #include...
C++ Создать таблицу с определенным форматированием http://www.cyberforum.ru/cpp-beginners/thread192718.html
Всем доброго времени суток. Подскажите пожалуйста, как бы написать программу которая вносила бы данные в следующую таблицу вида:| №подпункта|№Комнаты|Ф.И.О|Дата| Буду благодарен за любые задумки по этой теме.
C++ перегрузка степенным полиномом Здравствуйте помогите плз, как осуществить перегрузку степенным полиномом ??? за ранее спасибо подробнее

Показать сообщение отдельно
Питоша
0 / 0 / 0
Регистрация: 17.11.2010
Сообщений: 8
19.11.2010, 11:19  [ТС]
Цитата Сообщение от kravam Посмотреть сообщение
Даже не знаю что и сказать. Вопрос поставлен правильно, не вина автора что книги друг от друга отличаются и реализации компиляторов тоже. Я когда-то писал для себя талмуты по этой теме. Потом стало всё равно. Так-то всё верно, вот упрощённый код (компилятор GCC)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "conio.h"
#include "stdio.h"
 
int main(){
 int c;
 printf("Make input>\n");
 c=getchar();
 while (c != EOF){
  printf("kkkkkkkkkkkk\n");
  putchar(c);
  c=getchar();
 }
 printf("ggggggggggg\n");
_getch();
  
}
Да, действительно, когда пишем 1234<конец файла><Enter> происходит следующее:
1) Во-первых надо знать, что когда программа походит к функции getchar (строка 7), она проверяет- а не пустой ли буфер? (о буфере ниже) Если пустой, она останавливается (как в строке 7) и ждёт чё будет дальше. Если буфер непустой, она считывает с него символ

2) Буфер- область памяти, в которую вы всю эту херь запихиваете. Итак, мы подошли к строке 7, прога остановилась. Самое время запихать чё-нибудь в буфер. ПИшем: 1234<конец_потока><Enter>

всю эту херь, все эти 6 символов Вы запихали в буфер (<конец файла> это символ -1). Щас буфер выглядит так:

00110001 00110010 00110011 00110100 <-1> 0001000

Сосредоточтесь и постарайтьесь самостоятельно определить, почему 1 выладит как 00110001 и для всех остальных символов тоже. Если не справитесь, спрашивайте. Как -1 представить в двоичном коде, я позабыл
Последняя это число 10. ПРи нажатии на <Enter> в буфер попадает число 10.

3) Так, вот как только в буфер попало число 10 (нажали на <Enter>) прога НАЧИНАЕТ СЧИТЫВАТЬ БУФЕР ПО ОДНОМУ СИМВОЛУ

Сперва "1". После этого в переменную c попадает считанный символ "1" и там наверное внутри прожки есть двигатель-указатель какой-нибудь, который перемещается к следующему символу. А он "2"
Так, потом прога снова подходит к getchar () (строка 11 или какая там.) Ага, проверяет, пуст или нет буфер. Не пуст. Следующий на очереди символ "2". ОНа его считывает и благополучно выводит

И так далее.
А когда она должна дойти до : ^Z, она должна выйти из цикла. Должна да не обязана, у меня тоже так происходит. Что можно сказать? Может, компилятор так реализован. Может, система НЕ КЛАДЁТ в буфер -1- не знаю. Но вот если вводить <^Z><Enter> БЕЗ СИМВОЛОВ ВПЕРЕДИ, тогда прога РАСПОЗНАЕТ конец файла и не будет заходить в цикл а сразу напечатает, что там за циклом "gggggggg\n"

Я всё же думаю, чо это постарались разработчики Windows То есть при 1234<^Z><Enter> ^Z в буфер не попадает (на консоль выводится, а в буфер не попадает) и поэтому прога при считывании просто не видит этого символа. По моему скромному опыту смею предположить что это так.

Разбирайся давай. Пиши если чё.

Добавлено через 4 минуты
Да, и ещё. Если тебе нужно будет сделать, чтобы всё-таки прога распознавала как-нибудь конец входного потока ты можешь вместо EOF использовать ту же десятку.
То есть вот так:
C++
1
 while (c != 10)
Помни: в буфере окажется 10 по нажатию на <Enter>! Ну а Ctrl+Z можно не задействовать


насколько я прочитала, то 00110001 - это что-то связано с переводов систему ASCII кодов. Честно скажу, как именно это происходит я пока не поняла. Если не сложно, можете объяснить?

Что происходит остановка считывания и конец файла только когда перед комбинацией CTRL+Z нет символов, это я заметила, было интересно именно, почему в самой строчке остановка не действует? Ну да Бог с ним, как говорит мой начальник "это особенности".
И спасибо за развернутый ответ. )

Добавлено через 59 секунд
Цитата Сообщение от easybudda Посмотреть сообщение
Питоша, если это действительно из книжки программа строчка в строчку - закройте эту книгу и больше не открывайте!
Не вдаваясь в тонкости реализации getchar() читает один символ из стандартного ввода (с клавиатуры) и возвращает этот символ типом int.
Вот Вам "классический" вариант того-же самого, а чтобы Ctrl Z сработал - его нужно в новой строке вводить - появится ^Z нажмёте enter - окно закроется.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
 
int main(void){
    int c;
 
    while ( ( c = getchar() ) != EOF )
        putchar(c);
 
    return 0;
}
А какие книги посоветуете?

Добавлено через 1 минуту
И можно тогда уж совсем глупый вопрос?
Насколько сильно Visual C++ отличается от C++?
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru