с не следует процедуре работы программы - PullRequest
0 голосов
/ 08 мая 2019

резюме: система («очистить»);не работает должным образом.

Я использую gcc, версию Ubuntu 18.04 LTS для программирования на C.

что я намеревался было «прочитать каждое слово и распечатать из двух текстовых файлов. После окончания чтенияфайл, задержка 3 секунды и стирание терминала «

», чтобы я сделал два текстовых файла и с помощью системы («очистить»);стереть терминал.

вот целый код.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

void printFiles(char *file1,char *file2,char *change1, char *change2){
  FILE *f;
  char *text = malloc(sizeof(char)*100);
  f=fopen(file1,"r");

  system("clear");
  //while(!feof(f)){
  while(EOF!=fscanf(f,"%s",text)){
    //fscanf(f,"%s", text);
    printf("%s ",text);
    //usleep(20000);
  }
  //sleep(3);

  fclose(f);
  printf("\n");
  //all comment problems are appear here. and if I give delay, such as usleep() or sleep, delay also appear here. Not appear each wrote part.

  f=fopen(file2,"r");
  //while(!feof(f)){
  while(EOF!=fscanf(f,"%s",text)){
    if(strcmp(text,"**,")==0){
      strcpy(text,change1);
      strcat(text,",");
    }

    else if(strcmp(text,"**")==0){
      strcpy(text,change1);
    }
    else if(strcmp(text,"##.")==0){
      strcpy(text,change2);
      strcat(text,".");
    }
    else if(strcmp(text,"##,")==0){
      strcpy(text,change2);
      strcat(text,",");
    }
    printf("%s ",text);
    //usleep(200000);
  }
  fclose(f);
  free(text);
  sleep(3); //here is problem. This part works in the above commented part "//all comment problems are appear here."
  system("clear"); //here is problem. This part works in the above commented part "//all comment problems are appear here."
}


int main(){
  char file1[100] = "./file1.txt";
  char file2[100] = "./file2.txt";
  char change1[100]="text1";
  char change2[100]="text2";
  printFiles(file1,file2,change1,change2);
  return 0;
}

Мне очень жаль, имена файлов и переменных изменены из-за политики.Кроме того, содержимое файла также не может быть загружено.

Я не могу найти, какая часть прерывает процедурно-ориентированное программирование.Я думаю, что это была ошибка компилятора, потому что использование одного файла для чтения и system(clear); работает хорошо.

Я также делаю две точечные переменные, такие как 'FILE * f1;ФАЙЛ * f2;f1 = Еореп (file1);f2 = fopen (file2) ... `, но результат тот же.

Это ошибка компилятора?Если это так, что я должен сделать для решения этой проблемы?Спасибо.

Ответы [ 2 ]

1 голос
/ 08 мая 2019
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

void printFiles(char *file1,char *file2,char *change1, char *change2){
  FILE *f;
  char *text = malloc(sizeof(char)*100);
  f=fopen(file1,"r");

  system("clear");
  //while(!feof(f)){
  while(EOF!=fscanf(f,"%s",text)){
    //fscanf(f,"%s", text);
    printf("%s ",text);
    fflush(stdout);
    //usleep(20000);
  }
  //sleep(3);

  fclose(f);
  printf("\n");
  //all comment problems are appear here. and if I give delay, such as usleep() or sleep, delay also appear here. Not appear each wrote part.

  f=fopen(file2,"r");
  //while(!feof(f)){
  while(EOF!=fscanf(f,"%s",text)){
    if(strcmp(text,"**,")==0){
      strcpy(text,change1);
      strcat(text,",");
    }

    else if(strcmp(text,"**")==0){
      strcpy(text,change1);
    }
    else if(strcmp(text,"##.")==0){
      strcpy(text,change2);
      strcat(text,".");
    }
    else if(strcmp(text,"##,")==0){
      strcpy(text,change2);
      strcat(text,",");
    }
    printf("%s ",text);
    fflush(stdout);// The answer. 
    //usleep(200000);
  }
  fclose(f);
  free(text);
  sleep(3); //here is problem. This part works in the above commented part "//all comment problems are appear here."
  system("clear"); //here is problem. This part works in the above commented part "//all comment problems are appear here."
}


int main(){
  char file1[100] = "./file1.txt";
  char file2[100] = "./file2.txt";
  char change1[100]="text1";
  char change2[100]="text2";
  printFiles(file1,file2,change1,change2);
  return 0;
}

Подсказка для That's probably just buffering. Do fflush(stdout); before you sleep. – melpomene Спасибо.

0 голосов
/ 08 мая 2019

Вы можете попробовать это решение для задержки .

#include <time.h>
#include <stdio.h>

void delay(double seconds)
{
    const time_t start = time(NULL);
    time_t current;

    do
    {
        time(&current);
    } while(difftime(current, start) < seconds);
}

int main(void)
{
    printf("Just waiting...\n");
    delay(3);
    printf("...oh man, waiting for so long...\n");
    return 0;
}

Следующее решение почти такое же, как и в предыдущем, но с решением clear терминал .

#include <time.h>
#include <stdio.h>

#ifdef _WIN32
    #define CLEAR_SCREEN system ("cls");
#else
    #define CLEAR_SCREEN puts("\x1b[H\x1b[2J");
#endif

void delay(double seconds)
{
    const time_t start = time(NULL);
    time_t current;

    do
    {
        time(&current);
    } while(difftime(current, start) < seconds);
}

int main(void)
{
    printf("Just waiting...\n");
    delay(2); //seconds
    printf("...oh man, waiting for so long...\n");
    delay(1);
    CLEAR_SCREEN
    return 0;
}
...