C входом вход в файл? - PullRequest
       1

C входом вход в файл?

0 голосов
/ 17 января 2011

Я работаю над программой, которая регистрирует входные данные в файл.Это мой текущий код:

#include <stdio.h>
#include <curses.h>
#include <signal.h>
#define WAIT 3
#define INCORRECT "Incorrect input\n"
#define FILENAME ".xintrc"

int stop();

int main()
{
    char first[10], last[10];
    int i;
    FILE *fp, *fopen()
    initscr();
    scanf("%[^\n]", first);
    getchar();
    noecho();
    scanf("%[^\n]", last);
    printf("\n");
    getchar();
    echo();
    sleep(WAIT);
    if((fp = fopen(FILENAME, "a")) != NULL){
    fprintf(fp, "First:   %s Last: %s\n", first, last);
    fclose(fp);
  }

    printf(INCORRECT);
    endwin();
 }
    stop()
 {
    endwin();
    exit(0);
 }

Когда я компилирую, я получаю эту ошибку:

input1.c: In function ‘main’:
input1.c:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘initscr’
input1.c: In function ‘stop’:
input1.c:35: warning: incompatible implicit declaration of built-in function ‘exit’

Ответы [ 2 ]

3 голосов
/ 17 января 2011

Ну, вам нужна точка с запятой в конце:

FILE *fp, *fopen(); /* ; here! */

Возможно, вы также захотите остановить, чтобы соответствовать его прототипу:

/* includes */
int stop();

/* main etc */
int main(int argc, char** argv)
{
    /* main code */
}

int stop()
{
    endwin();
    exit(0);
}

А для exit() вам нужно #include <stdlib.h>

О, и для компиляции, скажем, это называется test.c, затем используйте gcc -lcurses test.c -o test.Это говорит gcc, что вы хотите связать с libcurses.

1 голос
/ 17 января 2011

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

#include <stdio.h>
#include <stdlib.h> /* for _Exit() */
#include <string.h> /* for strcspn() */
/* #include <curses.h> you don't need curses for such a simple program */
/* #include <signal.h> this header is not needed */

#define WAIT 3
#define INCORRECT "Incorrect input\n"
#define FILENAME "testfile"

void stop(void); /* match the new prototype */

int main(void) /* main() always returns int, use void if not using argc/argv */
{
  char first[10], last[10];
  /* int i;  You never use this */
  FILE *fp; /* You don't need *fopen() here */

  /* initscr(); */
  /* noecho(); */

  printf("Enter first name: "); /* Added by me */
  fgets(first, sizeof(first), stdin); /* Don't use scanf, fgets prevents overflows */
  first[strcspn(first,"\n")] = '\0'; /* chomp the newline if it exists */

  printf("Enter last name: "); /* Added by me */
  fgets(last, sizeof(last), stdin); /* Don't use scanf, fgets prevents overflows */
  last[strcspn(last,"\n")] = '\0'; /* chomp the newline if it exists */

  /* echo(); */
  sleep(WAIT);

  if((fp = fopen(FILENAME, "a")) != NULL){
    fprintf(fp, "First:   %s Last: %s\n", first, last);
    fclose(fp);
    stop(); /* You never call this, i'm guessing you want it here */
  }

  printf(INCORRECT); /* only called if fopen() fails */

  /* endwin(); */

  return 0; /* mandatory return for main() */
}

void stop(void) /* Use 'void' if the func takes no params and returns nothing */
{
  /* endwin(); */
  _Exit(0); /* _Exit is apart of C99 */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...