Ошибка "Неразрешенный внешний элемент" - C (СИ)
Формулировка задачи:
#include "StdAfx.h" #include <conio.h> #include <stdlib.h> #include <stdio.h> #include <ctype.h> #include <string.h> #include <locale.h> #include <io.h> void add_tex(void), lookup(void), del_tex(void), cop_tex(void), red_tex(void), poisk_tex(void), count(void); char menu(void); long int password; long int pasw; long int pasw2; int str; int i=0; int nomer=0; struct texnika{ char naz[30]; char tip[20]; int kol_vo; int god; int cena; }; struct texnika tender[50]; int main(void) { char choice; do { choice = menu(); switch(choice) { case '2': add_tex(); break; case '1': lookup(); break; case '3': del_tex(); break; case '4': cop_tex(); break; case '5': red_tex(); break; case '7': poisk_tex(); break; } } while (choice!='6'); return 0; } /* вывод меню и получение запроса */ char menu(void) { char ch; setlocale(LC_ALL,"Russian"); printf("Введите пароль: "); scanf("%ld",&password); pasw = 123456; pasw2 = 456789; if(password!=pasw){ printf("Неверный пароль\n"); getch(); return 1;} do { printf("(1) Просмотр\n"); printf("(2) Добавить\n"); printf("(3) Удалить\n"); printf("(4) Копировать\n"); printf("(5) Редактировать\n"); printf("(6) Выход\n"); printf("(7) Поиск\n"); ch = tolower(getche()); printf("\n"); } while(ch != '3' && ch != '2' && ch != '1' && ch != '4' && ch !='5' && ch !='6' && ch !='7'); return ch; } /* добавление техники */ void add_tex(void) { FILE *fp; char naz[80], tip[30]; int kol_vo, god, cena; if((fp=fopen("input.txt", "a")) == NULL) { printf("Невозможно открыть файл."); exit(1); } printf("Введите название, тип, кол-во, год и цену: "); fscanf(stdin, "%s%s%5d%d%d", &tender[i].naz, &tender[i].tip, &tender[i].kol_vo, &tender[i].god, &tender[i].cena); fscanf(stdin, "%*c"); /* удаление возврата каретки из потока ввода */ fprintf(fp,"%s %s %d %d %d\n", &tender[i].naz, &tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena); fclose(fp); } /* просмотр */ void lookup(void) { FILE *fp; char naz[80], tip[80]; int kol_vo, god, cena; if((fp=fopen("input.txt", "r")) == NULL) { printf("Невозможно открыть файл."); exit(1); } printf("\n|Название| Тип |Кол-во| Год | Цена |\n\n"); while (fscanf(fp,"%s%s%d%d%d",&tender[i].naz, &tender[i].tip, &tender[i].kol_vo, &tender[i].god, &tender[i].cena)!=EOF){ printf("%s\t%s\t%3d\t%d\t%d\n", &tender[i].naz, &tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena);} nomer++; fclose(fp); } /*удаление записи*/ void del_tex(void) { FILE *fp; FILE *fp2; int nomer,i=0; //char naz[80], tip[80],mas[100]; //int kol_vo, god, cena; int str=0; char ch; if((fp=fopen("input.txt", "r")) == NULL) { printf("Невозможно открыть файл."); exit(1); } while (fscanf(fp,"%s%s%d%d%d",&tender[i].naz, &tender[i].tip, &tender[i].kol_vo, &tender[i].god, &tender[i].cena)!=EOF){ str++; i++; } printf("Кол-во строк: %d\n",str); printf("Введите нормер записи которую надо удалить: \n"); scanf("%d",&nomer); if (nomer<1 || nomer>str){ printf("Неправильынй ввод!"); getch(); exit(1); } if((fp2=fopen("output.txt", "w")) == NULL) { printf("Невозможно открыть файл."); exit(1); } else { for (i=0;i<str;i++){ if (i!=(nomer-1)){ fprintf(fp2,"%s %s %d %d %d\n", &tender[i].naz, &tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena); printf("%s\t%s\t%3d\t%d\t%d\n", tender[i].naz, tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena); } } fclose(fp2); fclose(fp); remove("input.txt"); if(0==rename ("output.txt","input.txt")) printf("Выполнено успешно\n"); } } /*Копирование в дополнительынй файл*/ void cop_tex(void) { char var; char imya[20]; FILE *fp, *fp2; const int size=256; char mass[size]; /*Копирование*/ if((fp=fopen("input.txt", "rb")) == NULL) { printf("Невозможно открыть файл."); exit(1); } printf("Введите имя файла (с расширением): \n"); scanf("%s",imya); if((fp2=fopen(imya, "wb")) == NULL) { printf("Невозможно открыть файл."); exit(1); } size_t read; while((read = fread(mass,sizeof(char),size,fp)) != 0) { fwrite(mass,sizeof(char),read,fp2); fclose(fp); fclose(fp2); } } void red_tex(void) { FILE *fp; FILE *fp2; int nomer,i=0; int str=0; char ch; if((fp=fopen("input.txt", "r")) == NULL) { printf("Невозможно открыть файл."); exit(1); } while (fscanf(fp,"%s%s%d%d%d",&tender[i].naz, &tender[i].tip, &tender[i].kol_vo, &tender[i].god, &tender[i].cena)!=EOF){ str++; i++; } printf("Кол-во строк: %d\n",str); printf("Введите номер записи которую необходимо редактировать: \n"); scanf("%d",&nomer); if (nomer<1 || nomer>str){ printf("Неправильынй ввод!"); getch(); exit(1); } if((fp2=fopen("output.txt", "w")) == NULL) { printf("Невозможно открыть файл."); exit(1); } else { for (i=0;i<str;i++){ if (i!=(nomer-1)){ fprintf(fp2,"%s %s %d %d %d\n", &tender[i].naz, &tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena); //printf("%s\t%s\t%3d\t%d\t%d\n", tender[i].naz, tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena); } if (i==(nomer-1)){ printf("Введите новое название, тип, кол-во, год и цену: "); fscanf(stdin, "%s%s%5d%d%d", &tender[i].naz, &tender[i].tip, &tender[i].kol_vo, &tender[i].god, &tender[i].cena); fscanf(stdin, "%*c"); /* удаление возврата каретки из потока ввода */ fprintf(fp2,"%s %s %d %d %d\n", &tender[i].naz, &tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena); } } fclose(fp2); fclose(fp); remove("input.txt"); if(0==rename ("output.txt","input.txt")) printf("Выполнено успешно\n"); } } /*Поиск*/ void poisk_tex(void) { FILE *fp; if((fp=fopen("input.txt", "r")) == NULL) { printf("Невозможно открыть файл."); exit(1); } while(!feof(fp)){ ++i; fscanf(fp, "%s", tender[i].naz); fscanf(fp, "%s", tender[i].tip); fscanf(fp, "%f", &tender[i].kol_vo); fscanf(fp, "%f", &tender[i].god); fscanf(fp, "%f", &tender[i].cena); printf("%s%s%f%f%f",tender[i].naz, tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena); } count(); printf("Введите название техники: \n"); gets(tender[i].naz); int result=0; for (int i=1;i<=str;) { if(tender[0].naz==tender[i].naz) { printf("%s%s%f%f%f",tender[i].naz, tender[i].tip, tender[i].kol_vo, tender[i].god, tender[i].cena); i++; result++; } else i++; } if (result==0) { printf("Ничего не найдено\n"); } } void Count(void) { FILE *fp; fp=fopen("input.txt", "r"); int i=0; int str=0; while(!feof(fp)) { ++i; str++; fscanf(fp, "%s", tender[i].naz); fscanf(fp, "%f", &tender[i].god); } fclose(fp); }
Решение задачи: «Ошибка "Неразрешенный внешний элемент"»
textual
Листинг программы
fp=fopen("input.txt", "r");
Объяснение кода листинга программы
- Открывается файл
input.txt
для чтения (r
). - Переменная
fp
используется для хранения файлового указателя. - Если файл не может быть открыт, то программа выводит сообщение об ошибке и завершает свое выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д