Чтение строк печати из любой функции данных - PullRequest
0 голосов
/ 06 ноября 2018

Во-вторых, с моего назначения я новичок в программе на С, но слишком отстает от этого. Я должен решить это сегодня. Я думал, что в основном (для меня действительно сложно понять функцию с файлом) предполагается, что fscan должен прочитать файл и вывести новые строки из файла. Файл также включен, например, я тоже использую. Я знаю, что 5 баллов кажутся очень неловкими, но я новичок в программе на C и никогда не делал с функциональной частью программы на C. Я хотел вывести с i, чтобы подсчитать каждую строку для печати. Я также думал, что комментарии помогут немного больше информации. Для функции я не знаю, что написать код для fooen и fgets в первый раз.

Например:

Example input/output:
   ./a.out testfile

   1: Bob
   2: Tiffany
   3: Steve
   4: Jim
   5: Lucy
   ...
/* 5 points */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLEN 1000
#define MAX_LINE_LEN 4096
/**
 * Complete the function below that takes an array of strings and a integer
 * number representing the number of strings in the array and prints them out to
 * the screen with a preceding line number (starting with line 1.)
 */
void
printlines (char *a[], int n)
{

}    
/**
 * Create a main function that opens a file composed of words, one per line
 * and saves them to an array of MAXLEN strings that is then printed using
 * the above function.
 *
 * Hints:
 *  - Use fopen(3) to open a file for reading, the the returned file handle *    with the fscanf() function to read the words out of it.
 *  - You can read a word from a file into a temporary word buffer using the
 *    fscanf(3) function.
 *  - You can assume that a word will not be longer than MAXLEN characters.
 *  - Use the strdup(3) function to make a permanent copy of a string that has
 *    been read into a buffer.
 * 
 * Usage: "Usage: p7 <file>\n"
 * 
 * Example input/output:
 * ./p7 testfile
 *  1: Bob
 *  2: Tiffany
 *  3: Steve
 *  4: Jim
 *  5: Lucy
 * ...
 */
int main (int argv, char *argc[])
{  if (argc < 2)
    {
      printf ("Usage: p7 <file>\n");
    }
      char buffer[MAX_LINE_LEN];

  /* opening file for reading */
  FILE *fp = fopen (argv[1], "r");
  if (!fp)
    {
      perror ("fopen failed");      exit (EXIT_FAILURE);
    }

  int i = 0;
  while ((i <= MAX_LINES) && (fgets (buffer, sizeof (buffer), fp)))
    {
      printf ("%2i: %s", i, buffer); //i is to count from each lines
      i++;
    }
  fclose (fp);
  return (0);


}

Просмотр для testfile:

Bob
Tiffany
Steve
Jim
Lucy
Fred
George
Jill
Max
Butters
Randy
Dave
Bubbles

1 Ответ

0 голосов
/ 06 ноября 2018

Вы можете сделать так:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXLEN 1000
#define MAX_LINE_LEN 4096

void printlines (char *a[], int n)
{
    for (int i = 0; i != n; ++i)
        printf("%2d: %s\n", i, a[i]);
}

int main (int argc, char *argv[])
{  
    if (argc < 2)
    {
        printf ("Usage: p7 <file>\n");
        return -1;
    }

    FILE *fp = fopen (argv[1], "r");
    if (!fp)
    {
        perror ("fopen failed");
        exit (EXIT_FAILURE);
    }

    char* a[MAXLEN];
    char buffer[MAX_LINE_LEN];
    int i = 0;
    while (i < MAXLEN && fscanf(fp, "%s", buffer) == 1)
        a[i++] = strdup(buffer);
    printlines(a, i);
    fclose (fp);
    return (0);
}
...