#print Of course, you can also search for lines that contain backslashes; again, it's simply a matter of doubling the backslash in the search pattern. That is, /\\/ finds the next line with a backslash. Find the second occurrence of "\n\n" in the file "prog.c", and type "answer N", where N is its line number. #create prog.c int nsave = 0; selunit() { char fnam[20], s[50]; static char dobuff[50]; char posslev[20][20]; int diff[20], i, k, m, n, best, alts, statb[20]; FILE *f; char zb[200]; static char saved[20]; while (ask) { printf("What lesson? "); fflush(stdout); gets(dobuff); if (strcmp(dobuff, "bye") == 0) wrapup(0); level = todo = dobuff; snprintf(s, sizeof s, "../L%s", dobuff); if (access(s, 04) == 0) return; printf("no such lesson\n"); } alts = 0; retry: f=scrin; if (f==NULL) { snprintf(fnam, sizeof fnam, "../L%s", level); f = fopen(fnam, "r"); if (f==NULL) { fprintf(stderr, "No script for lesson %s.\n", level); wrapup(1); } while (fgets(zb, 200, f)) { trim(zb); if (strcmp(zb, "#next")==0) break; } } if (feof(f)) { printf("Congratulations\n\n.You have finished this sequence.\n"); fflush(stdout); todo = 0; return; } for(i=0; fgets(s, 50, f); i++) { sscanf(s, "%s %d", &posslev[i], &diff[i]); } best = -1; /* cycle through lessons from random start */ /* first try the current place, failing that back up to last place there are untried alternatives (but only one backup) */ n = grand()%i; for(k=0; k1) { nsave=1; strcpy(saved, level, sizeof saved); } todo = dobuff; fclose(f); } abs(x) { return(x>=0? x: -x); } grand() { static int garbage; int a[2], b; time(a); b = a[1]+10*garbage++; return(b&077777); } #copyin #user #uncopyin #match 73 #bad 43 The second______ one. #log #next 44.1h 10