При выводе данных на экран дублируется последнее значение - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программа считывает,добавляет и ищет данные из бинарного файла.Проблема заключается в том что при выводе данных на экран дублируется последнее значение.Не могу понять почему так выводит.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define ERROR_OPEN_FILE -3 
#define SIZE 30 
char path[256];
 
void main(int argc, char *argv[]) { 
FILE *iofile = NULL; 
char names[80];
char name[80];
int answer;
char s[] = "numbers.bin";
unsigned long counter; 
int i, num; 
int pos; 
int value = 0; 
int menu; 
int yn; 
start: 
              printf("Got %d arguments\n", argc);
                       for(i=0;i<argc;i++)
                          {
                              puts(argv[i]);
                                   } 
if(argc>1)
 {
for(yn=0;yn<strlen(argv[1]);yn++)
 {s[yn]=argv[1][yn];}}
 else{
          
         printf("Input the file name:");
              scanf("%s",s);
              iofile = fopen(s,"ab+");
              if (iofile == NULL) { 
                    printf("Error opening file"); 
                           getch(); 
                            exit(ERROR_OPEN_FILE); }} 

printf("\nDo your selection:\n1.List\n2.Add\n3.Find\n4.Exit\n"); 
printf("Selection: "); 
scanf("%d",&menu); 
   
if (menu==1){  label1:
                do {  
                    fread(&value, sizeof(long), 1, iofile); 
                         printf("%d ", value); }
                while(!feof(iofile));
                                 fclose(iofile); 
 
printf ("\nSelect an option: 1-Continue or 0-Exit\n");
 scanf("%d",&answer);
  if(answer == 1)
 {goto start;}
  else
 {goto exit;}} 
  else if(menu==2){
              (scanf ("%d", &value) != EOF); 
              fwrite(&value,sizeof(long),1,iofile);
fclose(iofile); 
printf ("\nSelect an option: 1-Continue or 0-Exit\n");
 scanf("%d",&answer);
  if(answer == 1)
 {goto start;}
  else
 {goto exit;}
}
  else if(menu==3){label3:    
num=0;
printf("Enter the name:\n");
scanf("%d",name);
while(!feof(iofile))
{fread(&names,sizeof(long),1,iofile);
 
if (!strcmp(name, names)) 
num=num+1;
 
}printf("Matches found %d\n",num);
printf ("\nSelect an option: 1-Continue or 0-Exit\n");
 scanf("%d",&answer);
  if(answer == 1)
 {goto start;}
  else
 {goto exit;}
}
else if(menu==4);{
    exit:
    exit(0);}
fclose(iofile);
}

Решение задачи: «При выводе данных на экран дублируется последнее значение»

textual
Листинг программы
if (!feof(iofile)) printf("%d ", value);

Объяснение кода листинга программы

  1. В условии используется оператор !, который инвертирует результат выражения feof(iofile). Это означает, что проверка на конец файла feof(iofile) возвращает 0 (ложь), если в файле еще есть данные для чтения.
  2. В функции printf передается строка формата %d (без кавычек), которая указывает на то, что нужно вывести целочисленное значение.
  3. Переменная value передается в функцию printf для вывода на экран.
  4. Значение value дублируется на экране, так как после вывода каждого значения функция printf возвращает значение, которое используется в качестве аргумента для повторного вызова функции printf.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы