The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Как непросто учится СИ"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Как непросто учится СИ"  –2 +/
Сообщение от dcc0email (?), 17-Сен-16, 15:38 
У меня почти весь ушёл на одну мизерную программу, чтобы написать без ошибок и то сомневаюсь.
Ищет символ в строке. Большего ничего не делает:

#include <stdio.h>

int main(int argc, char *argv[])
{
    char * str=argv[2];
    char * patrn=argv[1];
            
             if (argc < 2) {
             printf("Enter a symbol and string\n");
             return 0;
           }
             if (patrn[1] !='\0') {
             printf("Enter just one symbol\n");
             return 0;
           }
            if (argc < 3 ) {
             printf("Enter pattern and string\n");
             return 0;
           }
             if (argc > 3 ) {
             printf("Use double \" \" quotes for strings containing spaces\n");
             return 0;
           }
            
             int j =0;
             while (str[j] != 0) {
                  if (patrn[0] == str[j]) {
                  printf("Found: %c in position %d", str[j], j);
                  break;
                  return 1;            
                  }            
                  ++j;
             }
            
             return 0;        
}

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от asavah (ok), 17-Сен-16, 16:15   +1 +/
уважаемый, я всё понимаю,
но это не школа начинающих погромистов

для начала прочитайте "Brian W. Kernighan, Dennis Ritchie - C Programming Language - 2E"
желательно на английском,
а потом идите на профильные форумы

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2, #10

2. Сообщение от dcc0email (?), 17-Сен-16, 17:34   –2 +/
> уважаемый, я всё понимаю,
> но это не школа начинающих погромистов
> для начала прочитайте "Brian W. Kernighan, Dennis Ritchie - C Programming Language
> - 2E"
> желательно на английском,
> а потом идите на профильные форумы

Как раз эту книгу я сейчас и читаю.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #3, #5, #9

3. Сообщение от Pahanivo (ok), 19-Сен-16, 20:09   +/
С нашим образованием эдак лет через пяток для программера "Hello world!" будет считать очень круто ...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2

5. Сообщение от A (?), 07-Июл-18, 23:15   –1 +/
>> уважаемый, я всё понимаю,
>> но это не школа начинающих погромистов
>> для начала прочитайте "Brian W. Kernighan, Dennis Ritchie - C Programming Language
>> - 2E"
>> желательно на английском,
>> а потом идите на профильные форумы
> Как раз эту книгу я сейчас и читаю.

Книга то хорошая, но это не первый учебник с которого стоит начинать

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #6

6. Сообщение от Александрemail (??), 05-Окт-18, 16:27   –1 +/
>>> уважаемый, я всё понимаю,
>>> но это не школа начинающих погромистов
>>> для начала прочитайте "Brian W. Kernighan, Dennis Ritchie - C Programming Language
>>> - 2E"
>>> желательно на английском,
>>> а потом идите на профильные форумы
>> Как раз эту книгу я сейчас и читаю.
> Книга то хорошая, но это не первый учебник с которого стоит начинать

Вы не переживайте и не слушайте грубиянов с синдромом Даннига-Крюгера. Учитесь и все будет хорошо. Вот моя прога (сырая, но работает). Она не только ищет вводимый вами символ для поиска в файле, но и указывает строки где нашла и подсчитывает все, что нужно. Удачи вам. Не бросайте учебу.
#include <stdio.h>
#include <stdlib.h> // для exit(EXIT_FAILURE)
#include <string.h>
#include "myheader.h"

extern char str_arr[str][col]; // массив определен в main.c

/* ф-я принимает искомый символ ch, указ. на файл f_ptr, кол. строк в файле и столбцов f_str,  f_col и два указателя на счетчики совпадений искомого символа в строках и в файле вцелом fc_ptr и c_ptr ВОЗВРАЩАЕТ указатель на счетчик числа совпадений символа по всему файлу fc_ptr) */

int * find_char_infile(char ch, FILE * f_ptr, int f_str, int f_col, int * fc_ptr, int * c_ptr){
    //int file_count = 0;
    for (int i = 0; i < f_str; i++){
        fgets(str_arr[i], f_col, f_ptr);
        if(strchr(str_arr[i], ch) != NULL){ // ф-я strchr(str_arr[i], argv[1][0]) ищет вхождение символа argv[1][0] в строку         str_arr[i] и если он там сеть, возвр. его адрес(символа), если нет - NULL
            //int count = 0;
                for(int j = 0; j< f_col; j++){ // проходим строку по всем символам col
                    if(str_arr[i][j] == ch){
                        //++count; // счетчик совпадений для СТРОКИ
                        //++file_count; // счетчик совпадений для ФАЙЛА
                        ++(*fc_ptr); // счетчик совпадений для ФАЙЛА
                        ++(*c_ptr); // счетчик совпадений для СТРОКИ
                    }
                }
                        printf("символ \"%c\" встречается %i раз(а) в строке %s", ch, *c_ptr, str_arr[i]);
                        //count = 0;
                        *c_ptr = 0;
        } //конец блока if
                            
    } // конец блока for
    //printf("искомый символ встретился в файле %i раз(а)\n", *fc_ptr);
    return fc_ptr;
}


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5 Ответы: #7

7. Сообщение от Pahanivo (ok), 06-Окт-18, 00:03   +/
Может сначала нужно научится работать со временем? И датой?
Если что, то я имел ввиду - НАДО НАУЧИТСЯ ЧИТАТЬ ЭТИ ПАРАМЕТРЫ НА ПОСТАХ.


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6

8. Сообщение от xverizex (ok), 21-Дек-18, 08:00   +/
Ничего, научишься. Можно кстати выводить в стандартный поток ошибок вот так fprintf ( stderr, "%s\n", "Enter just one symbol" );
Ответить | Правка | Наверх | Cообщить модератору

9. Сообщение от And (??), 30-Мрт-19, 15:20   +/
> Как раз эту книгу я сейчас и читаю.

Тут соль ученья в том, что есть языки, а есть алгоритмы. Более важное для рутины и работы - знать шаблоны и алгоритмы. Талант - уметь их на ходу красиво выдумывать и изобретать.

А какой язык - это не очень важно. У каждого языка есть способрешить задачку более или менее красиво, это нужно бы уметь применять. Но соль ученья немного в другом: знать алгоритмы, уметь выбирать подходящий под задачу алгоритм и язык, зная особенности языка, красиво решить. Язык чаще выбирается глобально один раз под всю задачу, дальше уже маневрируешь - как оптимальнее решать на этом языке микрозадачки, как решать части большого. Но можно и из Шелл скрипта вызвать Перл, если уместно.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2

10. Сообщение от And (??), 30-Мрт-19, 15:22   –1 +/
> а потом идите на профильные форумы

Анекдот:


Амер-ский форум: задаёшь вопрос - получаешь ответ.
Израильский: задаёшь вопрос - тебя спрашивают в ответ.
Русский форум: задаёшь вопрос... - тебе долго объясняют какой ты дурак.

:)

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

11. Сообщение от Сергей (??), 01-Дек-23, 16:44   +/
>[оверквотинг удален]
>       return 1;
>            
>       }
>            
>       ++j;
>            
>  }
>            
>  return 0;
> }

А зачем бряк перед return? Если я правильно помню бряк прервет цикл и до return дело не дойдёт, не лучше ли сразу выйти с кодом 0? 1 это если есть ошибки, какая тут ошибка?

Ответить | Правка | Наверх | Cообщить модератору

12. Сообщение от Аноним (12), 02-Дек-23, 16:59   +/
>[оверквотинг удален]
>       return 1;
>            
>       }
>            
>       ++j;
>            
>  }
>            
>  return 0;
> }

Это в каком редакторе из коробки стиль кода K&R и кто учит си сразу с указателями?

Ответить | Правка | Наверх | Cообщить модератору

13. Сообщение от fidoman (ok), 13-Янв-24, 16:38   +/
>     char * str=argv[2];
>     char * patrn=argv[1];
>  if (argc < 2) {

Классика! Сначала прочитал, потом проверил.

(классика, потому что в ядре линукса видел подобное, с результатом в виде oops-ов раз в несколько дней в некоторых конфигурациях)

Так что диплом сишника можешь получить вне очереди, далеко пойдёшь.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #14

14. Сообщение от Аноним (14), 24-Янв-24, 01:02   +/
>>     char * str=argv[2];
>>     char * patrn=argv[1];
>>  if (argc < 2) {
> Классика! Сначала прочитал, потом проверил.
> (классика, потому что в ядре линукса видел подобное, с результатом в виде
> oops-ов раз в несколько дней в некоторых конфигурациях)
> Так что диплом сишника можешь получить вне очереди, далеко пойдёшь.

В какой из книжек о безопасных языках программирования учат обработке ошибок и в какой именно главе?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #13


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру