The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как непросто учится СИ, !*! 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, 16:15 , 17-Сен-16 (1) +1
    уважаемый, я всё понимаю,
    но это не школа начинающих погромистов

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

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

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

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

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

        • Как непросто учится СИ, !*! Александр, 16:27 , 05-Окт-18 (6) –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;
          }


      • Как непросто учится СИ, !*! And, 15:20 , 30-Мрт-19 (9)
        > Как раз эту книгу я сейчас и читаю.

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

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

    • Как непросто учится СИ - ОФФ, !*! And, 15:22 , 30-Мрт-19 (10) –1
      > а потом идите на профильные форумы

      Анекдот:


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

      :)

  • Как непросто учится СИ, !*! xverizex, 08:00 , 21-Дек-18 (8)
    Ничего, научишься. Можно кстати выводить в стандартный поток ошибок вот так fprintf ( stderr, "%s\n", "Enter just one symbol" );
  • Как непросто учится СИ, !*! Сергей, 16:44 , 01-Дек-23 (11)
    >[оверквотинг удален]
    >       return 1;
    >            
    >       }
    >            
    >       ++j;
    >            
    >  }
    >            
    >  return 0;
    > }

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

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

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

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

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

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

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

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

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




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

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