その前に、fgets の解説。
char * fgets(char * s, int n, FILE*stream)は、stream から入力を受取り、文字数が n に達するか、改行を読み込むか、EOF(File の終わり)に達するまで 文字を s で指される配列に取り込むというものです。
void swap(int i, int j) {
  int t;
  t = i; i = j; j = t;
}
int main(int argc, char *argv[]) {
  int i = 10;
  int j = 20;
  swap(i, j);
  printf("%d %d\n", i, j);
}
int i = 10;
void f(int i) {
  i = i + 10;
  printf("%d\n", i);
}
int main(int argc, char *argv[]) {
  f(i);
  printf("%d\n", i);
}
int i = 10;
void f(void) {
  i = i + 10;
  printf("%d\n", i);
}
int main(int argc, char *argv[]) {
  f();
  printf("%d\n", i);
}
int f(int n) {
  if (n <= 0)
    return 0;
  else
    return f(n-1)+n*n;
}
int main(int argc, char *argv[]) {
  printf("%d\n", f(3));
}
double f(double x) {
  return x*x;
}
char *s; char *t = "Kobe"; strcpy(s, t);
char *readline() {
  char buffer[1000];
  if (fgets(buffer, 1000, stdin) == NULL)
    return NULL;
  return buffer;
}
int main(int argc, char *argv[]) {
  char *line1, *line2;
  char buffer[1000];
  line1 = fgets(buffer, 1000, stdin);
  line2 = fgets(buffer, 1000, stdin);
  fputs(line1, stdout);
  fputs(line2, stdout);
}
ただし入力は以下の2行で,エラーは起らないとする.
abcd efg
int main(int argc, char *argv[]) {
  char *line1, *line2;
  line1 = malloc(1000);
  line2 = malloc(1000);
  fgets(line1, 1000, stdin);
  fgets(line2, 1000, stdin);
  fputs(line1, stdout);
  fputs(line2, stdout);
}
ただし入力は以下の2行で,エラーは起らないとする.
abcd efg
typedef struct person PERSON;
struct person {
  char *name;
  int age;
};
PERSON *g(PERSON *p) {
  p->age += 10;
  return p;
}
int main(int argc, char *argv[]) {
  PERSON me, *p;
  me.name = "Taro";
  me.age = 20;
  p = g(&me);
  printf("%d %d\n", me.age, p->age);
}
2002.10.22/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp