2015-04-20 2 views
-1

Для n = 2k (n четных) отобразите все круглые скобки, которые закрываются по-разному.name.exe прекратил работу с обратным отсчетом

in:4 

out: (()),()() 

Почему моя программа «exe перестала работать», когда я запускаю ее? Я сделал что-то неправильно с петлями или мой подход к этой проблеме не так?

#include<stdio.h> 


    int v[10],n; 

    void readfile() 
    { 
     FILE*fin; 

     fin=fopen("in.txt", "rt"); 

     if(fin==NULL) 
      printf("Error"); 
     else{ 
      fscanf(fin, "%d", n); 
     } 
     fclose(fin); 
    } 

    void writefile() 
    { 

     int j; 
     FILE*fout; 


     fout=fopen("out.txt", "wt"); 

     if(fout==NULL) 
      printf("Error"); 
     else{ 
      readfile(); 
      for(j=1; j<=n; j++) 
       if(v[j]==1) 
        fprintf(fout, "%c", 41); 
       else 
        fprintf(fout, "%c", 40); 
     } 
     fclose(fout); 
    } 

    int condition(int k) 
    { 
     int close=0, open=0, i; 
     readfile(); 

     for(i=1; i<=k; i++) 
      if(v[i]==0) 
       open++; 
      else 
       close++; 

     return open<=n/2 && close <= open; 

    } 

    void backtracking(int k) 
    { 
     int i; 
     readfile(); 
     for(i=0; i<=1; i++) 
     { 
      v[k]=i; 

      if(condition(k)) 

       if(k==n) 
        writefile(); 
       else 
        backtracking(k+1); 
     } 
    } 

    void main() 
    { 
     backtracking(1); 
    } 
+0

Вы пытались использовать отладчик наподобие gdb? – Eregrith

+0

'fscanf (fin,"% d ", n);' -> fscanf (fin, "% d", &n); – BLUEPIXY

+0

Нет, но я не думаю, что проблема с отладчиком. – Crytek

ответ

0

Попробуйте отладить свою программу.

Поместите контрольную точку в

fin=fopen("in.txt", "rt"); 

и проверить, если файл был открыт правильно.

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

(код вы вывесили не компилируется, потому что deschise не определен)

+0

Я забыл перевести на английском языке, что строка, это не проблема, программа на моем собственном языке открыта на английском языке, fin = fopen («in.txt», «rt»), открывается правильно, я даже пробую программу без использования каких-либо файлов, все же он отображает exe, перестает работать. – Crytek

1

Я попробовал ваш код, вот одна проблема в этой строке:

fscanf(fin, "%d", n); 

Вы должны использовать вместо этого:

fscanf(fin, "%d", &n); 

Потому что, когда вы используете функцию fscanf(), вам необходимо передать указатели вместо переменных.

0

fout=fopen("out.txt", "wt"); Содержимое удаляется каждый раз.
Поэтому должно быть fout=fopen("out.txt", "at");

и удалите файл в главном окне.

int main(void) 
{ 
    remove("out.txt"); 
    backtracking(1); 
    return 0; 
}