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

Небольшая проблемка с прогой. - C++

Восстановить пароль Регистрация
 
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
21.07.2011, 17:48     Небольшая проблемка с прогой. #1
Здравствуйте!
возникла проблема.
По идее програ должна брать рандромные слова из файлов и выводить их на экран.

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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
int counter1=0,counter2=0,counter3=0,randvalue1,randvalue2,randvalue3;
int Derilium(){
    srand(time(NULL));
    FILE *Prt1, *Prt2,*Prt3;
    char word1[200],word2[200],word3[200];
    Prt1=fopen("1.txt","a+");
    Prt2=fopen("2.txt","a+");
    Prt3=fopen("3.txt","a+");
    randvalue1=rand()%14841+1;
    randvalue2=rand()%6463+1;
    randvalue3=rand()%9420+1;
    for(int randtab=0;randtab<=randvalue1;randtab++){
        fscanf(Prt1,"\r\n");}
 
    for(int randtab=0;randtab<=randvalue2;randtab++){
        fscanf(Prt2,"\r\n");}
 
    for(int randtab=0;randtab<=randvalue3;randtab++){
        fscanf(Prt3,"\r\n");}
 
        fscanf(Prt1,"%s",word1);
        fscanf(Prt2,"%s",word2);
        fscanf(Prt3,"%s",word3);
        printf("%s %s %s\n",word1,word2,word3);
    fclose(Prt1);
    fclose(Prt2);
    fclose(Prt3);
}
int main() {
    int Derilium();
    return 0;
}
Буду очень признателен за помощ!

Экран мне задерживать незачем, ибо линукс)
а магические числа-это количества строк.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2011, 17:48     Небольшая проблемка с прогой.
Посмотрите здесь:

C++ Небольшая проблемка)
C++ Прошу помочь с прогой, если можно) надо её оживить...
Трабла с прогой C++
C++ Что не так с прогой?
C++ Посогите с прогой работать не хочет
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
21.07.2011, 17:53     Небольшая проблемка с прогой. #2
Цитата Сообщение от Invader_Zim Посмотреть сообщение
randvalue1=rand()%14841+1;
randvalue2=rand()%6463+1;
randvalue3=rand()%9420+1;
странные магические числа

Берете вы строки, а не слова, рандом не рандомный. Но, подозреваю, что вся проблема в том, что вы не задерживаете экран, это можно сделать так:
C++
1
system("pause");
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
21.07.2011, 17:55     Небольшая проблемка с прогой. #3
код смотреть впадлу. но алгоритм как вариант:
рандом() % количество строк в файле
рандом % длиннаСтроки.
сканировать до первого пробела. считываешь слово до следующего пробела.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
21.07.2011, 17:56     Небольшая проблемка с прогой. #4
а в чем проблема? неправильно выводит, ошибка или, как заметили выше вообще ничего?
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
21.07.2011, 18:09  [ТС]     Небольшая проблемка с прогой. #5
Ничего не выводится .
ОС Убунта, компилятор GCC.
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
21.07.2011, 18:13     Небольшая проблемка с прогой. #6
int fseek ( FILE * stream, long int offset, int origin ); - установить позицию чтения в файле.
Invader_Zim
Twilight Parasite
 Аватар для Invader_Zim
153 / 149 / 2
Регистрация: 21.07.2011
Сообщений: 907
21.07.2011, 19:19  [ТС]     Небольшая проблемка с прогой. #7
int fseek ( FILE * stream, long int offset, int origin );
это хорошо, но возникает вопрос как указать именно на начало строки(во всех файлах в 1 строке 1 слово)

Добавлено через 21 минуту
Ответ найден-бинарный файл со словами.
Как закрыть тему?

Добавлено через 38 минут
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 <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
using namespace std;
int counter1=0,counter2=0,counter3=0,randvalue1,randvalue2,randvalue3;
struct NAME{
    char name[200];
}ABS;
int Derilium(){
    srand(time(NULL));
    FILE *Prt1, *Prt2,*Prt3;
    char word1[200],word2[200],word3[200];
    Prt1=fopen("1.dat","r");
    Prt2=fopen("2.dat","r");
    Prt3=fopen("3.dat","r");
    randvalue1=rand()%14841+1;
    randvalue2=rand()%6463+1;
    randvalue3=rand()%9420+1;
    fseek (Prt1,sizeof(NAME)*randvalue1,SEEK_SET);
    fread(word1,sizeof(NAME),1,Prt1);
    fseek (Prt2,sizeof(NAME)*randvalue2,SEEK_SET);
    fread(word2,sizeof(NAME),1,Prt2);
    fseek (Prt3,sizeof(NAME)*randvalue3,SEEK_SET);
    fread(word3,sizeof(NAME),1,Prt3);
    printf("%s %s %s\n",word1,word2,word3);
    fclose(Prt1);
    fclose(Prt2);
    fclose(Prt3);
    return 0;
}
int copy(){
    char a[200];
    FILE * Pt,*Pt1;
    Pt=fopen("3.dat","w");
    Pt1=fopen("3.txt","r");
    while(!feof(Pt1)){
        fscanf(Pt1,"%s",a);
        printf("%s\n",a);
        strcpy(ABS.name,a);
        fwrite(&ABS,sizeof(struct NAME),1,Pt);
    }
    fclose(Pt);
    fclose(Pt1);
    return 0;
}
int main() {
    Derilium();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2011, 22:54     Небольшая проблемка с прогой.
Еще ссылки по теме:

C++ Помощь с прогой
Проблемка с g++ C++
C++ Что не так с прогой?

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

Или воспользуйтесь поиском по форуму:
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
21.07.2011, 22:54     Небольшая проблемка с прогой. #8
как вариант алгоритма выборки случайного числа:
1) смотри скоко символов в файле ( fseek + ftell )
2) выбирай случайное число N от 0 до <длина файла>
3) читай по 1 слову ( fscanf ) пока ftell <= N или !eof

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
    FILE * fp = fopen("1.txt","rt");
    if (!fp) { return 1; }
 
    srand(time(0));
 
    fseek(fp,0,SEEK_END);
    size_t sz_file = ftell(fp);
    fseek(fp,0,SEEK_SET);
 
    size_t pos = rand()%sz_file;
 
    char word[30];
    while ( fscanf(fp,"%s",word)==1 && !feof(fp) && (ftell(fp)<=pos));
 
    puts(word);
    puts("Done.");
 
    getchar();
    return 0;
}
работает блин
Yandex
Объявления
21.07.2011, 22:54     Небольшая проблемка с прогой.
Ответ Создать тему
Опции темы

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