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

доорагнизовать цикл в готовой проге - C++

Восстановить пароль Регистрация
 
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
25.01.2010, 19:21     доорагнизовать цикл в готовой проге #1
Итак есть программа она считывает файл, и находит слова которые длиной от l1 до l2. Вроде как с горем на пополам я добилась того, чтобы она прогонялась хотя бы одни раз и выводила хоть что-то пусть и не в файл. Это дело уже второе. Мне нужно, чтобы она проходилась по всему документу, а не только одну букву и на выход (об это о великий F10 сказал).
Если кто-то еще может, то и вывод в файл состряпать.
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
#include <stdio.h> //ввод вывод данных 
#include <conio.h> //для _getch ожидание
#include <string.h> // ввод строк
#include <locale.h> //для установки русской раскладки
 
int main()
{
    FILE *f, *g;
    setlocale(LC_ALL, "Russian");
    printf("Задача 2.\n");
    printf("Разработала Широченко Олеся.\n");
    printf("Проверил Богатов Роман Николаевич.\n");
    printf("Текст задачи:\n");
    printf("Дан текстовый файл F. Переписать в другой файл G все слова,\nдлина которых составляет от L1 до L2 символов.\n\n\n");
    
    
    int L1, L2;
    char c;
    f = fopen("F.txt","r");
    g = fopen("G.txt","w");
    printf("Введите L1 и L2 для того, чтобы программа смогла найти\nслова и переписать их в файл F.\n");
printf("Length L1= "); scanf("%d", &L1); printf("Length L2= "); scanf("%d", &L2); 
printf("\n\n\n");
char s[3000],s1[100]; 
int i=0, k=0;
while (!feof(f))
{
fscanf(f, "%c", &c);
s[i]=c;
if (c==' ' || c=='\n' || c=='\t');
{
        {
            s1[k]=s[i];
            i++;
            k++;
        }
        if ((k>=L1 && k<=L2))
        {
        for (int j=0; j<k; j++) 
    fprintf(g, "%c", s1[j]);
    fprintf(g, " ");
        }
else k=0;
if(s[i]=='\0') break;
i++;
}
//if (c!=' ' && c!='\n' && c!='\t')i=i+1;
    }
s1[k]='\0';
 printf("\n%s",s1);
    printf("\nПрограмма успешно выполнена!");
    fclose(f); 
    fclose(g);
getch();
}
Добавлено через 2 часа 0 минут
Очень нужно, посмотрите пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2010, 19:21     доорагнизовать цикл в готовой проге
Посмотрите здесь:

Ошибки в проге C++
C++ Ошибка в проге
Меню к программе C++
C++ Ошибка в проге
ошибки в проге C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
 Аватар для Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
25.01.2010, 19:47     доорагнизовать цикл в готовой проге #2
C
1
2
3
4
5
6
7
8
while(true)
{
FILE *f1,*f2;
char str[100];
fgets(str,100,f1);// читаем из f1
if(!feof(f1))fprintf(f2,"%s",str);// пишем в f2
else break;
}
qwarta
 Аватар для qwarta
57 / 57 / 5
Регистрация: 20.11.2009
Сообщений: 214
25.01.2010, 20:36     доорагнизовать цикл в готовой проге #3
Попробуем разобраться.
строка 39: такое объявление переменной j в стиле С++, компилятор должен ругаться. Лучше объявить где-то выше, например, добавить в строку 25.
строка 30: проверяем на соответсвие считанного символа символам пробела, конца строки и табуляции.
И если он им не соответсвует ЗАПИСИ НЕ ПРОИЗОЙДЕТ! Нужно применить логическое отрицание (!).
В цикле if() неразбериха со скобками.
В строках 19 и 20 обязательна проверка на открытие файлов.
Попробуй исправить, должно заработать.
Carpe
 Аватар для Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
26.01.2010, 12:47  [ТС]     доорагнизовать цикл в готовой проге #4
qwarta, вообще не знаю я потыкалась сама вчера вечером и все заработало)
работающий код на 3000 символов:
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
#include <stdio.h> //ввод вывод данных 
#include <conio.h> //для _getch ожидание
#include <string.h> // ввод строк
#include <locale.h> //для установки русской раскладки
 
int main()
{
        FILE *f, *g;
        setlocale(LC_ALL, "Russian");
        //printf("Текст задачи:\n");
        //printf("Дан текстовый файл F. Переписать в другой файл G все слова,\nдлина которых составляет от L1 до L2 символов.\n\n\n");
        
        
        int L1, L2;
        char c;
        f = fopen("F.txt","r");
        g = fopen("G.txt","w");
        printf("Введите L1 и L2 для того, чтобы программа смогла найти\nслова и переписать их в файл F.\n");
printf("Length L1= "); scanf("%d", &L1); printf("Length L2= "); scanf("%d", &L2); 
printf("\n\n\n");
char s[3000],s1[100]; 
int i=0, k=0;
while (!feof(f))
{
fscanf(f, "%c", &c);
s[i]=c;
//if (c==' ' || c=='\n' || c=='\t');
 
        if(s[i]!=' ' && s[i]!='\0')
                {
                        s1[k]=s[i];
                        i++;
                        k++;
                }
        else 
        {
            if ((k>=L1 && k<=L2))
                {
                for (int j=0; j<k; j++) 
                    //s1[k]='\0';                   
                    //printf("\n%s",s1);
        fprintf(g, "%c", s1[j]);
        fprintf(g, " ");
        //s[i]=='\0';
                        }   
            //else 
                k=0;
    if(s[i]=='\0') break;
                    i++;
        }
}
//s1[k]='\0';
 //printf("\n%s",s1);
//if (c!=' ' && c!='\n' && c!='\t')i=i+1;
        printf("\nПрограмма успешно выполнена!");
        fclose(f); 
        fclose(g);
getch();
}
там где закоменчено лучше не разкоменчивать, а удалить)
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
26.01.2010, 14:42     доорагнизовать цикл в готовой проге #5
Carpe, Вот Вам ещё вариант с проверками и прочей фигнёй, которой ученики себя обычно не отягощают...
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define STRLEN 256
 
/* считывает файл, и находит слова которые длиной от l1 до l2. */
int main(void){
    char buf[STRLEN] = { 0 }, fin_name[STRLEN] = { 0 }, fout_name[STRLEN] = { 0 };
    FILE *fin, *fout;
    int len, max_len, min_len;
    
    printf("Minimum length for words: ");
    if ( scanf("%d%*c", &min_len) != 1 )
        exit(1);
    printf("Maximum length for words: ");
    if ( scanf("%d", &max_len) != 1 )
        exit(1);
    if ( min_len < 1 || max_len < min_len ){
        fprintf(stderr, "Bad papameters!\n");
        exit(1);
    }
    
    printf("Input file: ");
    if ( scanf("%255s", fin_name) != 1 )
        exit(1);
    if ( !*fin_name )
        exit(1);
    if ( ( fin = fopen(fin_name, "r") ) == NULL ){
        fprintf(stderr, "Can't open file \"%s\" for input!\n", fin_name);
        exit(1);
    }
    printf("Output file ('-' = stdout): ");
    if ( scanf("%255s", fout_name) != 1 )
        exit(1);
    if ( *fout_name == '-' )
        fout = stdout;
    else {
        if ( ( fout = fopen(fout_name, "w") ) == NULL ){
            fprintf(stderr, "Can't open file \"%s\" for output!\n", fout_name);
            exit(1);
        }
    }
    
    while ( fscanf(fin, "%255s", buf) == 1 )
        if ( ( len = strlen(buf) ) >= min_len && len <= max_len )
            fprintf(fout, "%s ", buf);
    if ( ferror(fin) ){
        fprintf(stderr, "Can't read from input file!\n");
        exit(1);
    }
    if ( ferror(fout) ){
        fprintf(stderr, "Can't write to output file!\n");
        exit(1);
    }
    
    fclose(fin);
    fclose(fout);
    exit(0);
}
Добавлено через 33 секунды
Цитата Сообщение от Carpe Посмотреть сообщение
там где закоменчено лучше не разкоменчивать

Не по теме:

Отличная фраза!

Yandex
Объявления
26.01.2010, 14:42     доорагнизовать цикл в готовой проге
Ответ Создать тему
Опции темы

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