Member 14030709 Ответов: 1

Как мне правильно его изменить


У меня есть словарь, написанный на языке С. Вот мой раздел, который я пишу, чтобы изменить слово. Я ввожу 2 слова, например: Привет, привет, затем я хочу изменить "привет" другим словом, но слово "Привет" не меняется, в моем файле будет новое слово или другое слово заменит слово "привет".

Что я уже пробовал:

Label21: system("cls");

                    fp=fopen("dictionary.dat", "rb+");
                    printf("Enter the word to modify : ");
                    fflush(stdin);
                    gets(word);
                    while((fread((char *)&dictionary, sizeof(dictionary), 1, fp))==1){
                        if(strcmp(word, dictionary.add_word)==0){
                            printf("\nWord: %s", dictionary.add_word);
                            printf("\nSpell: %s",dictionary.add_spelling);
                            printf("\nMean: %s", dictionary.add_mean);
                            printf("\n");
                            printf("Do you want to modify this record : ? (Y/N)");
                            fflush(stdin);
                            scanf("%c", &ch);
                            fseek(fp, sizeof(dictionary), 0);
                            if(ch=='Y'|| ch=='y'){
                                printf("Enter the word: \n");
                                fflush(stdin);
                                gets(dictionary.add_word);

                                printf("Enter the the spell: \n");
                                fflush(stdin);
                                gets(dictionary.add_spelling);

                                printf("Enter the the mean: \n");
                                fflush(stdin);
                                gets(dictionary.add_mean);
                                fwrite((char *)&dictionary, sizeof(dictionary), 1, fp);
                                    printf("Record Modified");
                            }
                            else
                                printf("No modifications were made");
                    fclose(fp);
                    }
                    }

                    Label22:
                       printf("\n\n1 -> Edit more words...");
                       printf("\n2 -> Back to Main Menu");
                       printf("\n3 -> Exit Program\n");
                       scanf("%d",&shift);
                       if(shift==1)
                        goto Label21;
                       if(shift==2)
                        goto Label0;
                       if(shift==3)
                        break;
                       if(shift!=1&&2&&3){
                        printf("\nWrong!<^_^>! Please enter number(1->3)! Thank you!");
                        goto Label22;
                       }

1 Ответов

Рейтинг:
5

OriginalGriff

Для начала избавьтесь от всех ярлыков и goto операторы и замените их структурированным кодом: циклы, if ... else if ... else</code, <code>switch и так далее. Затем забывать goto даже существует в течение пяти лет - к этому времени вы будете иметь хорошее представление о том, когда это уместно и необходимо использовать его.
С помощью goto в тривиальном начинающем коде, подобном этому, есть рецепт плохо структурированного, спагетти-кода, который трудно понять и еще хуже модифицировать.

Затем вы можете проверить это снова и, возможно, начать исправлять проблемы, которые вы заметили. Но это будет в значительной степени зависеть от ваших данных (а также от другого кода, который вы не показываете), и у нас нет к нему доступа.
Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей компиляторной системы, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!