URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10121
[ Назад ]

Исходное сообщение
"Как непросто учится СИ"

Отправлено dcc0 , 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;        
}


Содержание

Сообщения в этом обсуждении
"Как непросто учится СИ"
Отправлено asavah , 17-Сен-16 16:15 
уважаемый, я всё понимаю,
но это не школа начинающих погромистов

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


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

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


"Как непросто учится СИ"
Отправлено Pahanivo , 19-Сен-16 20:09 
С нашим образованием эдак лет через пяток для программера "Hello world!" будет считать очень круто ...

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

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


"Как непросто учится СИ"
Отправлено Александр , 05-Окт-18 16:27 
>>> уважаемый, я всё понимаю,
>>> но это не школа начинающих погромистов
>>> для начала прочитайте "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;
}



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



"Как непросто учится СИ"
Отправлено And , 30-Мрт-19 15:20 
> Как раз эту книгу я сейчас и читаю.

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

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


"Как непросто учится СИ - ОФФ"
Отправлено And , 30-Мрт-19 15:22 
> а потом идите на профильные форумы

Анекдот:


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

:)


"Как непросто учится СИ"
Отправлено xverizex , 21-Дек-18 08:00 
Ничего, научишься. Можно кстати выводить в стандартный поток ошибок вот так fprintf ( stderr, "%s\n", "Enter just one symbol" );

"Как непросто учится СИ"
Отправлено Сергей , 01-Дек-23 16:44 
>[оверквотинг удален]
>       return 1;
>            
>       }
>            
>       ++j;
>            
>  }
>            
>  return 0;
> }

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


"Как непросто учится СИ"
Отправлено Аноним , 02-Дек-23 16:59 
>[оверквотинг удален]
>       return 1;
>            
>       }
>            
>       ++j;
>            
>  }
>            
>  return 0;
> }

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


"Как непросто учится СИ"
Отправлено fidoman , 13-Янв-24 16:38 
>     char * str=argv[2];
>     char * patrn=argv[1];
>  if (argc < 2) {

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

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

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


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

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