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

Обращение к функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Function - Delete(s,n,l). Purpose - удаление из строки s подстроки http://www.cyberforum.ru/cpp-beginners/thread649022.html
Function - Delete(s,n,l). Purpose - удаление из строки s подстроки, начиная с позиции n, длиной l (аналогичная библиотечная Function есть в Pascal).
C++ на входе программы даются два числа на входе программы даются два числа N и P. программа на выходе должна дать такое максимальное число М, что N! делится на Р в степени М, но не делится на Р в степени М+1. примечание: 1. числа N и Р так велики, что нет смысла считать значение N!. 2. числа N и Р являются натуральными. http://www.cyberforum.ru/cpp-beginners/thread649017.html
C++ Перевод из 10 си в 11-16
помогите перевести число из десятиричной системы исчисления в любую другую начиная с 11 и заканчивая 16. с++ начал осваивать недавно сделал переводы с 2 по 9, а как сделать с 11 по 16 ни как не пойму.
C++ Фильтрация изображений
Привет ребята. Какие есть алгоритмы по фильтрации изображений(подавление шума). Какие есть книги по этой теме? Что можно почитать и тд.?
C++ Проверьте правильность решения задачи http://www.cyberforum.ru/cpp-beginners/thread648994.html
Составить программу перевода радианной меры угла в градусы, минуты и секунды. Решение: #include <iostream> #include <locale.h> #include <stdio.h> #include <math.h> using namespace std;
C++ Обычное математическое задание С прошлого года непомню С++ вспоминается гибло, чтобы не наделать ошибок помогите где ошибка и что дополнить. №1 ((sqr(x)-x*y)/(9*sqr(x)-18*x*y+9*(sqr(y))))+((a*a*a*a-a)/(3*a*a+3*a+3)) Решить №2 (ln(sin(3*x+2^x) (не помню код степени исправте) #include <iostream> #include <math.h> using name space std; подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.09.2012, 02:15     Обращение к функции
Цитата Сообщение от 4ININ Посмотреть сообщение
Яж специально поставил цыкл while, чтобы пропускались несколько символов
Тогда, хотя-бы, поставьте это последним.
C++
1
2
while ( fin.peek() == '\n' )
            {fin.ignore(1,'\n');    }
И всё равно криво будет работать, потому что неизвестна последовательность в пустой строке пробельных символов. Представьте такую строку: ' '' ''\t''\t''\n' и такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
while ( !fin.eof()  )
        {
            fin.getline(string ,513);
                        
            while ( fin.peek() == '\t' )
            {fin.ignore(1,'\t');    } 
            while ( fin.peek() == ' ' )
                {fin.ignore(1,' ');}
            while ( fin.peek() == '\n' )
            {fin.ignore(1,'\n');    }
            ++numberOfLines;
 
            cout<<string<<endl;
        }
Как он сработает? Пропустится два пробела, а остальное считается и счётчик увеличится. Потому что проверка на '\t' идёт перед проверкой на ' ', а в строке оказалось наоборот и т.д. Правильно код будет работать, если пробельные символы в строке идут в том же порядке, как и в коде. Любой другой порядок - и ошибка. Ваш код будет работать, то верно, то неверно, в зависимость от содержания строки. Ещё раз повторяю - подход неверный. Нужно не пробельные символы игнорировать, а искать в строке печатный символ, если есть, то увеличивать счётчик.
В предыдущем посте, я неправильно написал, что только один пробельный символ пропускается, но кривизну кода это не отменяет.

Добавлено через 30 минут
Вот такой код будет корректно работать:
Код
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
#include <iostream>
#include <fstream>
#include <clocale>
using namespace std;
 
unsigned long CalcOfString (char *NameOfFile);
char fileName[255] = "main3.cpp";
                                                                                                                                    
int main()
{
    setlocale(LC_CTYPE, "Russian");
    //cout<<" Enter file name : ";
    //cin>> fileName; 
    CalcOfString ( fileName );
            
    system("pause");
    return 0;
}
 
unsigned long CalcOfString (char *NameOfFile)
{
    unsigned long numberOfLines = 0;
    char string[512];
    
    ifstream fin(fileName);
    if (fin)
    {
       while ( fin.peek() == '\t' || fin.peek() == ' ' 
                                  || fin.peek() == '\n' 
                                  || fin.peek() == '\r') 
                    fin.ignore(1); 
        
        while (!fin.eof())
        {
            fin.getline(string, 512);
            ++numberOfLines;
            
            cout<< numberOfLines << ") " << string << endl;
                              
            
            while ( fin.peek() == '\t' || fin.peek() == ' ' 
                                       || fin.peek() == '\n' 
                                       || fin.peek() == '\r') 
                     fin.ignore(1); 
         }    
    }
    else  cout<< " File: " << fileName << " is missing "; 
 
    fin.close();
    
    cout<<" \n"<<numberOfLines<<" "<<endl;
    
    return numberOfLines;
}


Добавлено через 10 минуту
Но такое решение мне больше нравится:
Код
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
#include <iostream>
#include <fstream>
#include <clocale>
#include <cctype>
using namespace std;
 
unsigned long CalcOfString (char *NameOfFile);
char fileName[255] = "main3.cpp";
                                                                                                                                    
int main()
{
    setlocale(LC_CTYPE, "Russian");
    //cout<<" Enter file name : ";
    //cin>> fileName; 
    CalcOfString ( fileName );
            
    system("pause");
    return 0;
}
 
unsigned long CalcOfString (char *NameOfFile)
{
    unsigned long numberOfLines = 0;
    char string[512];
    
    ifstream fin(fileName);
    if (fin)
    {
       while ( !isgraph((unsigned char)fin.peek()) && !fin.eof())
                  fin.ignore(1); 
        
        while (!fin.eof())
        {
            fin.getline(string, 512);
            ++numberOfLines;
            
            cout<< numberOfLines << ") " << string << endl;
                     
            
            while ( !isgraph((unsigned char)fin.peek()) && !fin.eof())
                       fin.ignore(1); 
         }    
    }
    else  cout<< " File: " << fileName << " is missing "; 
 
    fin.close();
    
    cout<<" \n"<<numberOfLines<<" "<<endl;
    
    return numberOfLines;
}
 
Текущее время: 13:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru