Member 12879870 Ответов: 2

Почему изменение C++ влияет на программу, хотя частота, которая считается, одинакова в обоих случаях


#include<stdio.h>
int main()
{
 /*to print the frequency of odd digits*/
   int i , n ,num,c=0;
   FILE *f1,*f2;
   printf("enter the no. of positive nos.\n");
   scanf("%d",&n);
   printf("enter the numbers:\n");
   f1=fopen("DATA.C","w");

   for(i=0;i<n;i++) 
   {
     scanf("%d",&num);
     putw(num,f1);
   }
   fclose(f1);

   f1=fopen("DATA.C","r"); 
   f2=fopen("ODD.C","w");

   while((num=getw(f1))!=EOF)
     if(num%2!=0)
       putw(num,f2);

   fclose(f2);
   
   printf("total frequency is::\n");

   if (num%2!=0) c++; 

   printf("%d",c);  
   return c;


если мы поместим c++ ниже putw (num, f2), то результат будет другим, но тем же. почему?
Выше одного правильно

#include<stdio.h>
int main()
{
   int i , n ,num,c=0;
   FILE *f1,*f2;
   printf("enter the no. of positive nos.\n");
   scanf("%d",&n);
   printf("enter the numbers:\n");

   f1=fopen("DATA.C","w");

   for(i=0;i<n;i++) {
     scanf("%d",&num); 
     putw(num,f1);
   } 

   fclose(f1);
   f1=fopen("DATA.C","r");
   f2=fopen("ODD.C","w");
   
   while((num=getw(f1))!=EOF)
     if(num%2!=0) 
        putw(num,f2);
     c++; 
     /*here is the fault*/
     fclose(f2);
    
     printf("total frequency is::\n");
     printf("%d",c);

     return c;


пожалуйста, проверьте неисправность...

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

Я пробовал запускать оба набора кода

CPallini

Я сильно сомневаюсь, что первая версия верна. Оба фрагмента вашего кода кажутся мне ущербными.

2 Ответов

Рейтинг:
1

Jochen Arndt

Ваш код является было довольно нечитабельно (спасибо Крису за редактирование; я попробовал это сделать, прежде чем ответить здесь, но потерпел неудачу).

Но я думаю, что решение таково

while((num=getw(f1))!=EOF)
{
    if(num%2!=0) 
    {
        putw(num,f2);
        c++;
    }
}

в то время как ваш код, кажется,
while((num=getw(f1))!=EOF)
    if(num%2!=0) 
        putw(num,f2);
c++;

Обратите внимание, что использование правильного отступа показывает, что происходит.


CPallini

Вот и все. 5.

Jochen Arndt

Спасибо.

И спасибо Крису за редактирование. Код из исходного вопроса был нечитаем, и я не смог его отредактировать.

Рейтинг:
1

Patrice T

Не ясно, что должно быть c если предполагается подсчитать количество нечетных значений, то оба кода неверны.

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

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.