The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Проблема новичка , !*! A6e3iana, 14-Янв-22, 10:51  [смотреть все]
Всем доброго времени суток. Изучаю программирование и решая задачу столкнулся с проблемой, нуждаюсь в объяснении что я делаю не так. Приступим:
Задача 12.7: Даны две фамилии. Определить, какая из них длиннее. (из задачника "1400 задач по программированию" от Златопольский Д.М.)
Для себя решил что входные данные поданы в виде одной строки.
Код решения компилируется без замечаний (gcc -Wall -g file.c -o file).
При запуске программы получаю бесконечный ввод данных.
Тестируя отдельно самолепную функцию GetString таких проблем не получаю и ввод заканчивается как и задумано при нажатии клавиши Enter. Добавление 1 следующей строчки кода и отладочной печати ведет к вышеназванной проблеме бесконечного ввода. Объясните что я делаю не так. Спасибо за внимание.
Вот код решения задачи:

#include <stdio.h>

int GetString(char *str, int strsize)
{
    char c;
    int i=0;

    while ((c=getchar())!='\n') {
        if (i<=strsize-1){
            str[i]=c;
            i++;
        }
    }
    str[i]='\0';
    return 0;
}

int GetWord (char *str, int number, char *word, int wordsize)
{
    int i=0, k=0;
    int countword=0;
    char prev=' ';

    while (str[i]!='\0') {
        if (prev==' ' && str[i]!=' ') {
            countword++;
        }
        if (countword==number && str[i]!=' ' && k<=wordsize-1) {
            word[k]=str[i];
            k++;
        }
        prev=str[i];
    }
    word[k]='\0';
    return  k;
}

int main () {
    enum {strsize=100, wordsize=20};
    char str[strsize];
    char surname1[wordsize];
    char surname2[wordsize];
    int lensurname1=0;
    int lensurname2=0;

    GetString(str, strsize);
    lensurname1=GetWord (str, 1, surname1, wordsize);
    lensurname2=GetWord (str, 2, surname2, wordsize);
    if (lensurname1 > lensurname2 ) {
        printf("%s is longer than %s!\n", surname1, surname2);
    }
    if (lensurname1 < lensurname2 ) {
        printf("%s is longer than %s!\n", surname2, surname1);
    }
    if (lensurname1 == lensurname2 ) {
        printf("Surnames are equal!\n");
    }
    return 0;
}

  • Проблема новичка , !*! Аноним, 17:02 , 14-Янв-22 (2)
  • Проблема новичка , !*! parad, 09:42 , 15-Янв-22 (3)
  • Проблема новичка , !*! ACCA, 21:09 , 17-Янв-22 (5)
    • Проблема новичка , !*! A6e3iana, 10:02 , 18-Янв-22 (6)
      > Хороший пример, как НЕ НУЖНО писать программы. Сравни с этим:

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

      Первый: "Как выглядит промышленный код?" По задумке выношу реализацию в отдельные функции и в main оставляю только общую логику и организацию данных. На данном этапе на простых программах это избыточный код, но может быть такая привычка даст результаты в будущем?

      Второй: "Как правильно учиться?" Где то прочел: пока не знаешь как устроенны и работают простые библиотечные функции не используй их, а пиши свои реализации". ПОДЧЕРКНУ: совет для стадии обучения. Мне он понравился вот и леплю как могу.

      Из Примера подчеркнул:
      Проверку входный данных - полезно, ЗАПОМНЮ!
      Введение переменной хранящей разницу вместо постоянного сравнения и её имя "diff". ЗАПОМНЮ!
      Это вообще мрак придумывать имена для переменных на англ да ещё как можно короче.

      Что думаете о выше поставленных вопросах?


    • Проблема новичка , !*! Конч, 20:25 , 18-Янв-22 (7)
    • Проблема новичка , !*! Конч, 20:28 , 18-Янв-22 (8)



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

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