Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
1

Не работает fopen, скажите что не так плз

22.11.2009, 22:38. Показов 5743. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется программа по заданию:
Дан текст. Написать программу печати всех строк, которые короче 10 символов.
Программа на C.

Программу я написал:
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 <stdio.h>
#include <conio.h>
 
 
void main()
{
//Объявление переменных, посредников
FILE *aa,*bb;
int simvoli=0;
int nomerstrok=1;
int number[300];
int zap=0;
char c;
char adress[50];
bool flag=false;
 
printf("Print a path to your file:\n");
scanf("%s",adress);
 
/*Открываем канал связи с файлом
по адресу adress(введен с клавиатуры) для r - чтения*/
aa=fopen("C:\Text.txt","r");
 
//Помещаем в C след. символ и проверяем его на неравенство EOF
while ((c=fgetc(aa))!=EOF)
{
simvoli++;
if (c=='\n') //Если текущий символ - переход на новую строку...
    {
    if (simvoli<10)
        {zap++; number[zap]=nomerstrok;}
    nomerstrok++; //...увеличим номер текущей строки на 1
    simvoli=0;
    }
}
 
fclose(aa);
bb=fopen("C:\Text.txt","r");
simvoli=0;
nomerstrok=1;
zap=1;
 
//Теперь печатаем каждую строку, номер которой лежив в number[]
while ((c=fgetc(bb))!=EOF)
{
if (nomerstrok==number[zap])
    {flag=true; zap++; printf("\n");}
if (flag==true)
    printf("%c",c);
if (c=='\n')
    {flag=false; nomerstrok++;}
}
getch();
}
Но в aa вечно кладется NULL. Хотя файл Text.txt на диске есть, и не пустой.
Какова причина?

Не работает ни на Turbo C++, ни в VS2008...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2009, 22:38
Ответы с готовыми решениями:

Не работает код, скажите что не так)
вот код немогу понять почему выдает ошыбки. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

Нужно отделить части адреса как в комментарии к программе. Но почему то не работает. Скажите пожалуйста. Что не так?)
Нужно отделить части адреса как в комментарии к программе. Но почему то не работает. Скажите...

Что-то не так с fopen
Что компилятор хочить в fopen? Вот например что здесь не так? void WriteSum(double *pmatrix) {...

Посмотрите конфиг. скажите что не так или что стоит заменить?
http://kostroma.dns-shop.ru/catalog/cart/?cart_items=138239-1,143321-1,126014-1,157910-1,158182-1,12...

8
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
22.11.2009, 22:48 2
C++
1
aa=fopen("C:\\Text.txt","r");
0
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
22.11.2009, 23:09  [ТС] 3
Цитата Сообщение от rangerx Посмотреть сообщение
C++
1
aa=fopen("C:\\Text.txt","r");
Не помогает)
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12831 / 7568 / 1764
Регистрация: 25.07.2009
Сообщений: 13,960
22.11.2009, 23:33 4
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
61
62
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAX_LEN 10
 
/* Написать программу печати всех строк, которые короче MAX_LEN символов. */
 
int main(){
    char fin_name[BUFSIZ], fout_name[BUFSIZ], str[BUFSIZ];
    FILE *fin, *fout;
    size_t len;
    
    printf("Input file name (just press <enter> to use stdin): ");
    fgets(fin_name, BUFSIZ, stdin);
    printf("Output file name (just press <enter> to use stdout): ");
    fgets(fout_name, BUFSIZ, stdin);
    
    if ( *fin_name == '\n' )
        fin = stdin;
    else {
        len = strlen(fin_name) - 1;
        fin_name[len] = '\0';
        if ( (fin = fopen(fin_name, "r")) == NULL ){
            fprintf(stderr, "Can't open file %s\n", fin_name);
            exit(1);
        }
    }
    
    if ( *fout_name == '\n' )
        fout = stdout;
    else {
        len = strlen(fout_name) - 1;
        fout_name[len] = '\0';
        if ( (fout = fopen(fout_name, "w")) == NULL ){
            fprintf(stderr, "Can't open file %s\n", fout_name);
            exit(1);
        }
    }
    
    while ( fgets(str, BUFSIZ, fin) ){
        /* если нужно пропускать пустые строки, раскомментировать: */
        /*      
        if ( *str == \'n' )
            continue;
        */
        len = strlen(str);
        /* проверка на символ \n в конце строки. Если присутствует, то не считается */
        len = ( str[len - 1] == '\n' ) ? len - 1 : len;
        if ( len < MAX_LEN ){
            if ( fputs(str, fout) == EOF ){
                fprintf(stderr, "Can't write to file %s\n", fout_name);
                exit(1);
            }
        }
    }
    
    fclose(fin);
    fclose(fout);
    
    return 0;
}
0
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
22.11.2009, 23:38  [ТС] 5
Все конечно прекрасно, но не могли бы Вы объяснить какая ошибка у меня?
Просто мне нужно использовать только то, что присутствует в моем коде - самые базовые функции языка C.
0
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
22.11.2009, 23:52 6
А вы в 39 строчке двойной слеш поставили ?
0
18 / 18 / 5
Регистрация: 08.10.2009
Сообщений: 94
23.11.2009, 00:09  [ТС] 7
Цитата Сообщение от Goodwin98 Посмотреть сообщение
del
что?

Добавлено через 12 минут
Да.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.11.2009, 09:27 8
C
1
2
3
/*Открываем канал связи с файлом
по адресу adress(введен с клавиатуры) для r - чтения*/
aa=fopen("C:\Text.txt","r");
C
1
2
3
    /* Открываем канал связи с файлом по адресу address
       (введен с клавиатуры) для r - чтения*/
    aa = fopen(address, "r");
0
0 / 0 / 0
Регистрация: 17.11.2009
Сообщений: 29
23.11.2009, 13:05 9
не знаю, но вощможно fopen_s надо так.
0
23.11.2009, 13:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2009, 13:05
Помогаю со студенческими работами здесь

скажите что не так
Разработать программу, которая переводит дюймы в сантиметры. 1 дюйм =2,54см. Построить таблицу...

скажите что не так!
#include &lt;iostream&gt; int main() { long a, b; std::cin &gt;&gt; a; b=b+(a*(a+1))/2); ...

Скажите,что не так?
Здравствуйте! Помогите разобраться, что к чему.В который не раз не получается,нуждаюсь в вашей...

посмотрите и скажите что не так
Процессор Intel Core i3-6100 Материнская плата Gigabyte GA-B150-HD3 Видеокарта Gigabyte PCI-Ex...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru