2015-11-08 66 views
1

我已經編寫了一個從用戶處獲取文本文件的程序。每行打印60個字符

那麼它應該打印60個字符,然後在時間上開始一個新行,然而,即使它的工作原理

有些話超過該上限,然後將其切斷字到一半,然後再次啓動

在一條新的線上。所以我需要我的程序基本上找出

這個詞是否適合60個字符的限制,所以沒有單詞被分割。

#include <stdio.h> 
#include <stdlib.h> 
int main(void) 
{ 
char ch, file_name[25]; 
FILE *fp; 
printf("Enter file name: \n"); 
scanf("%24s" ,file_name); 

if ((fp = fopen(file_name,"r")) == NULL){ 
    perror("This file does not exist\n"); 
    exit(EXIT_FAILURE);} 

int c, count; 

count = 0; 
while ((c = fgetc(fp)) != EOF) { 
    if (c == '\n') 
     putchar(' '); 
    else 
     putchar(c); 

    count++; 
    if (count == 60) { 
     putchar('\n'); 
     count = 0; 
    } 
} 
putchar('\n'); 
fclose(fp); 
} 
+0

無關,但你的代碼有一個緩衝區溢出 – mooiamaduck

+0

「無字拆了」。好的,所以你需要寫下一個字是什麼。那麼什麼定義了一個詞的開始和結束。然後,您可以識別第60個字符是否在單詞內。 –

+0

..或者寫下一個字不是。一個定義可能是「一個詞不包含空格」。 –

回答

1

你可以掃描一個單詞,如果行和單詞小於60,連接它們。否則,請打印該行並將該單詞複製到重新開始該過程的行。

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

int main(void) { 
    FILE *fp = NULL; 
    char file_name[257] = {'\0'}; 
    char line[61] = {'\0'}; 
    char word[61] = {'\0'}; 
    int out = 0; 

    printf ("Enter file name:\n"); 
    scanf (" %256[^\n]", file_name); 

    if ((fp = fopen (file_name, "r")) == NULL) { 
     printf ("could not open file\n"); 
     return 1; 
    } 

    while ((fscanf (fp, "%60s", word)) == 1) { 
     if (strlen (line) + strlen (word) + 1 <= 60) { 
      strcat (line, " "); 
      strcat (line, word); 
      out = 0; 
     } 
     else { 
      printf ("%s\n", line); 
      strcpy (line, word); 
      out = 1; 
     } 
    } 
    if (!out) { 
     printf ("%s\n", line); 
    } 

    fclose (fp); 
    return 0; 
} 
2
#include <stdio.h> 
#include <stdlib.h> 
int readWord(FILE *fp,char *buff,char *lastChar){ 
    char c; 
    int n=-1; 
    *buff=0; 
    *lastChar=0; 
    while((c= fgetc(fp))!=EOF){ 
     n++; 
     if(isspace(c)){ 
      /* 
       you may keep tabs or replace them with spaces 
      */ 
      *lastChar=c; 
      break; 
     }  
     buff[n]=c; 
     buff[n+1]=0; 
    } 
    return n; 
} 


int main(void) { 
    char ch, file_name[25]; 
    char buff[50]; 
    int pos=0; 
    FILE *fp; 
    printf("Enter file name: \n"); 
    gets(file_name); 

    if (!(fp = fopen(file_name,"r"))) { 
     perror("This file does not exist\n"); 
     exit(EXIT_FAILURE); 
    } 

    int c, count; 

    count = 0; 
    while ((pos=readWord(fp,buff,&ch))!=EOF) { 
     count+=pos+(!!ch); 
     if(count>60){ 
      printf("\n"); 
      count=pos; 
     } 

     if(ch){ 
      printf("%s%c",buff,ch); 
     }else{ 
      printf("%s",buff); 
     } 
     if(!pos){ 
      count=0; 
     } 

    } 
    putchar('\n'); 
    fclose(fp); 
    return 0; 
}