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

ANSI C - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Разработать консольное приложение http://www.cyberforum.ru/cpp-beginners/thread94149.html
Условие: Разработать консольное приложение для управления программными проектами Вся информация приложения хранится в трех файлах: – работники (идентификатор работника; фамилия; специальность; опыт работы) – проекты (идентификатор проекта; название; описание; стадия проекта) – назначения (идентификатор назначения; идентификатор проекта; идентификатор работника) Приложение должно...
C++ Не могу передать массив в функцию Ситуация следующая: Хочу сделать функцию для умножения матриц А и В. Т.е. чтобы параметрами функции были два массива А и В 3х3, а возвращался бы массив С 3х3 . Вопрос: Как передать в функцию массивы? int pr(?,?) { int i,j,; for(i=0;i<3;i++) for(j=0;j<3;j++) return (A * B + A * B + A * B); http://www.cyberforum.ru/cpp-beginners/thread94117.html
Массив по спирали C++
Помогите, пожалуйста, заполнить массив по спирали, начиная от середины по часовой стрелке: 9 2 3 8 1 4 7 6 5
C++ Разделить, считываемые из txt, строки точками
Задача такая: Написать программу, которая считывает текст из файла и выводит на экран только предложения, содержащие введенное с клавиатуры слово. Как я понимаю, суть программы в том, чтобы считать каждое предложение в каждую отдельную строку, чтобы потом уже в считанных строках искать нужное слово и выводить нужную строку на экран. Получается считывание строки должно быть посимвольным? ...
C++ Среди цифр введенной строки распечатать ту, которая появлялась чаще других http://www.cyberforum.ru/cpp-beginners/thread94054.html
помогите кто нибудь а то комп не работает, и какую книгу по си можно взять чтобы было написано простым языком 1..Среди цифр введенной строки распечатать ту, которая появлялась чаще других. Если таких цифр было несколько, распечатать ту, что встречалась первой. 2...Распечатать введенную строку, заменив строчные буквы, прописными и повторив дважды каждую цифру.
C++ Вывести К-ый элемент последовательности. Есть последовательность 12345678910.... нужно вывести к-ый элемент. Например если ввожу 11,то выводит 0. Алгоритм вроде придумал, записать в массив типа сначала 1,2,3,4,5,6,7,8,9, 1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9, 2,0,2,1,2,2,2,3.... подробнее

Показать сообщение отдельно
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
17.02.2010, 03:50     ANSI C
Цитата Сообщение от accept
текстовые файлы нормально преобразует, а mp3, pdf обрывает
это, видимо, из-за cat f.mp3 | ./test
cat не показывает неотображаемые символы, поэтому они не передаются в программу

Добавлено через 18 минут
Код
[guest@station test]$ echo -ne "abcd\x00ef" >file.txt
[guest@station test]$ du -b file.txt
7       file.txt
[guest@station test]$ cat file.txt | ./test >file2.txt
[guest@station test]$ du -b file2.txt
4       file2.txt
[guest@station test]$ cat file.txt
abcdef[guest@station test]$
[guest@station test]$ cat file2.txt
dcba[guest@station test]$
Добавлено через 36 секунд
неотображаемые передаёт, а нулевой нет

Добавлено через 20 часов 27 минут
во, теперь и mp3

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct node {
    char *p;
    struct node *next;
};
 
struct stack {
    struct node *head;
};
 
void CreateStack(struct stack *ps);
int PushStack(struct stack *ps, struct node *pn);
int PopStack(struct stack *ps, struct node *pn);
 
char *MemDupLine(const char *l, size_t size);
void MemRevLine(char *l, size_t n);
 
enum {
    MAXLINE = 1000 /* maximal length of a line (equiv. to int) */
};
 
int main(void) /* C89 ANSI */
{
    char line[MAXLINE];
    int c, i;
    int maxlength, lastlength;
    
    struct stack s;
    struct node n;
    
    CreateStack(&s);
    
    maxlength = sizeof line;
    lastlength = 0;
    
    i = 0;
    
    do {
    
        if ((c = getchar()) != EOF)
            line[i++] = c;
    
        if (i >= maxlength || (c == EOF && i > 0)) {
        
            if (c == EOF && i > 0)
                lastlength = i;
        
            n.p = MemDupLine(line, i);
            
            MemRevLine(n.p, i);
            
            if(PushStack(&s, &n) == 0) {
                fprintf(stderr, "error: not enough memory" "\n");
                exit(EXIT_FAILURE);
            }    
            
            i = 0;
        
        }
    
    } while (c != EOF);
    
    while (PopStack(&s, &n) != 0) {
        
        if (lastlength == 0)
            fwrite(n.p, maxlength, 1, stdout);
        else {
            fwrite(n.p, lastlength, 1, stdout);
            lastlength = 0;
        }
        
        free(n.p);
    
    }    
    
    exit(EXIT_SUCCESS);
}
 
/* MemRevLine:  reverses n bytes in line l  */
void MemRevLine(char *l, size_t n)
{
    char *end;
    int c;
    
    end = l+n-1;
 
    for ( ; l < end; l++, end--)
        c = *l, *l = *end, *end = c;
}
 
/* MemDupLine:  duplicates size bytes of line l */
char *MemDupLine(const char *l, size_t size)
{
    char *p;
    
    p = (char *) malloc(size);
    
    if (p != NULL);
        memcpy(p, l, size);
    
    return p;
}
 
/* CreateStack:  creates a clear stack ps */
void CreateStack(struct stack *ps)
{
    ps->head = NULL;
}
 
/* PushStack:  pushes to a stack ps a node pn;
               returns 1 or 0 */
int PushStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    tmp = (struct node *) malloc(sizeof(struct node));
    
    if (tmp == NULL)
        return 0;
    
    *tmp = *pn;
    tmp->next = ps->head;
    ps->head = tmp;
    
    return 1;
}
 
/* PopStack:  pops from a stack ps a node pn;
              returns 1 or 0 */
int PopStack(struct stack *ps, struct node *pn)
{
    struct node *tmp;
    
    if (ps->head == NULL)
        return 0;
    
    tmp = ps->head;
    *pn = *tmp;
    ps->head = tmp->next;    
    free(tmp);
    
    return 1;
}
Код
[guest@station test]$ du -b 1.mp3
5951552 1.mp3
[guest@station test]$ cat 1.mp3 | ./test >2.mp3;
[guest@station test]$ du -b 2.mp3
5951552 2.mp3
[guest@station test]$ head -c20 1.mp3 | hexdump -C;
00000000  ff fb 90 44 00 00 01 94  00 35 ed 00 00 08 2e 80  |...D.....5......|
00000010  06 bd a0 00                                       |....|
00000014
[guest@station test]$ tail -c20 2.mp3 | hexdump -C;
00000000  00 a0 bd 06 80 2e 08 00  00 ed 35 00 94 01 00 00  |..........5.....|
00000010  44 90 fb ff                                       |D...|
00000014
[guest@station test]$


оказалось не всё так просто
функция обращения строки стопорилась на нуль-символе
да и printf тоже

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