fclose, fopen
// using 'fclose' function #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { FILE *fptr; char *str = "Test string"; char *file = "temp.txt"; char buff[255]; int ch; if ( ferror ( fptr = fopen(file,"w") ) ) { perror("Cann't open temp.txt for 'w'\n"); exit(EXIT_FAILURE); } fputs(str,fptr); freopen(file,"r",fptr); while ( ( ch = fgetc(fptr)) != EOF ) fputc(ch,stdout); fclose(fptr); remove(file); return 0; } OUTPUT : // Test string fcloseall
#include <stdio.h> #include <stdlib.h> #include <errno.h> int main (int argc, char *argv[]) { FILE *p[3]; char buff[256], phone[255], name[50]; char *file[] = {"name.dat","phone.dat","report.dat"}; char *mod[] = {"r","r","w"}; int i = 0; // open 3 files. 2 for reading, 1 for writing for ( ; i < 3; i++ ) { if ( (p[i] = fopen (file[i],mod[i])) == NULL ) { sprintf(buff,"Cann't open %s for \%s\. err: %d", file[i],mod[i],errno); fprintf(stderr,"%s\n",buff); if ( i > 0 ) // close all opened files fcloseall(); exit(EXIT_FAILURE); } } i = 1; while ( fscanf(p[0],"%s%s",buff,name) == 2 && fscanf(p[1],"%s",phone) == 1 ) { fprintf(p[2],"%d:%s %s:%s\n",i++, buff,name,phone); } // close all opened files fcloseall(); // open report.dat for reading if ( (p[0] = fopen (file[2],mod[0])) == NULL ) { sprintf(buff,"Cann't open %s for \%s\. err: %d", file[2],mod[0],errno); fprintf(stderr,"%s\n",buff); exit(EXIT_FAILURE); } while ( (fgets (buff,254,p[0])) != NULL ) { fprintf(stdout,"%s",buff); } fclose(p[0]); return 0; } OUTPUT : // 1:Linda Bain:123-3455 // 2:Robert Smith:345-9877 // 3:Ivan Mazepa:456-9870 feof
#include <stdio.h> int main (int argc, char *argv[]) { FILE *fp; int c; fp = fopen("test.txt","r"); /* print `EOF' character */ while ( !feof(fp) ) { c = fgetc(fp); fputc(c, stdout); // or fputc ( c=fgetc(fp), stdout ); } puts("\n"); // puts 2 new lines rewind(fp); /* mutch better */ while ( !feof(fp) ) { c = fgetc(fp); if ( feof(fp) ) break; fputc ( c, stdout ); } return 0; } OUTPUT : // First line // Second line // ÿ // // First line // Second line ferror, perror, clearerr
#include <stdio.h> #include <errno.h> #include <stdlib.h> int main (int argc, char *argv[]) { FILE *fp; int c; char *file_name = "nonexisting.txt"; /* full notation */ if ( ferror ( fp = fopen(file_name,"r")) ) { perror("Cann't open file for reading\n"); clearerr(fp); /* exit(EXIT_FAILURE); */ } /* shorter */ fp = fopen(file_name,"r"); if ( ferror(fp) ) { fprintf(stderr,"Cann't open file. Error: %d\n",errno); clearerr(fp); /* exit(EXIT_FAILURE); */ } fp = fopen(file_name,"w"); if ( !ferror(fp) ) { fprintf(stdout,"File is opened for writing!\n"); } /* read char from file wich id opend for writing */ fputc('A',fp); if ( ferror(fp) ) { perror("File is opend for writing, not reading!\n"); exit(EXIT_FAILURE); } /* `exit' function closes all opened files we don't need to use `fclose()' */ // not reached statement return 0; } OUTPUT : // I tested `ferror' in Mandrake, RedHat, SuSE, // and never had correct result. // Every time - "Segmentation fault". // In Unix this function works as needed. // // I think that it is the default reaction on SIGSEGV, // that calls `abort()' function. // // Some Message from gdb ( debuger ): // $ gdb -q a.out // (gdb) run // Starting program: /home/ana/C/Stdio/a.out // // Program received signal SIGSEGV, Segmentation fault. // 0x40099498 in ferror () from /lib/libc.so.6 // (gdb) where // #0 0x40099498 in ferror () from /lib/libc.so.6 // #1 0x080486a2 in main () // #2 0x4004a7ee in __libc_start_main () from /lib/libc.so.6 fflush
// functon 'fflush' #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { FILE *phone_p; char *name[] = { "Robert Smith", "Linda Bain","Ivan Mazepa", NULL }; char *phone[] = { "345-3455", "123-9876","987-3456", NULL }; int i = 0; char buff[255]; if ( ferror ( phone_p = fopen("phone.dat","w")) ) { perror("Cann't open for writing\n"); exit(EXIT_FAILURE); } for ( ; i < 3; i++ ) { sprintf(buff,"%d:%s:%s\n",i+1,name[i],phone[i]); fputs(buff,phone_p); fflush(phone_p); // fflush(NULL) - flushes all opened stream for output } // reopen for reading freopen ("phone.dat","r",phone_p); { while ( fgets(buff,254,phone_p) ) fprintf(stdout,"%s",buff); } fclose(phone_p); remove("phone.dat"); return 0; } OUTPUT : // 1:Robert Smith:345-3455 // 2:Linda Bain:123-9876 // 3:Ivan Mazepa:987-3456 fgetc, fputc
#include <stdio.h> int main (int argc, char *argv[]) { FILE *in; int ch; in = fopen ("report.dat","r"); while ( (ch = fgetc(in)) != EOF ) { fputc (ch,stdout); } fclose(in); return 0; } OUTPUT : // 1 Linda Bain 123-3455 // 2 Robert Smith 345-9877 // 3 Ivan Mazepa 456-9870 fgetpos
#include <stdio.h> int main (int argc, char *argv[]) { FILE * fp; fpos_t pos; int ch; /* open file for writing + reading */ fp = fopen ("test.txt","w+"); /* cursor position */ printf ("Position of cursor is %lu\n",ftell(fp)); /* save this position */ fgetpos (fp, &pos); /* writing message to the file */ fputs ("That is a test message",fp); printf ("Position of cursor is %lu\n",ftell(fp)); /* put cursor to the previosly saved position */ fsetpos (fp, &pos); printf ("Position of cursor is %lu\n",ftell(fp)); /* change contants of file ('That' for 'This') */ fputs ("This",fp); printf ("Position of cursor is %lu\n",ftell(fp)); /* put cursor to the position '0' */ rewind(fp); /* reading the file */ while ( (ch = fgetc(fp)) != EOF ) { fputc(ch,stdout); } fclose (fp); /* removing the file */ remove("test.txt"); return 0; } OUTPUT : // Position of cursor is 0 // Position of cursor is 22 // Position of cursor is 0 // Position of cursor is 4 // This is a test message fgets
#include <stdio.h> #include <stdlib.h> #include <string.h> int main (int argc, char *argv[]) { char buff[255]; char *name; double gpa; printf ("Enter your name : "); fgets (buff,25,stdin); buff[strlen(buff)-1] = '\0'; name = (char*)malloc(strlen(buff)+1); strcpy(name,buff); printf ("\nEnter your GPA : "); fgets (buff,5,stdin); gpa = strtod(buff,(char **)NULL); printf ("\nStudent: %s; GPA: %.2lf\n", name, gpa); free(name); return 0; } OUTPUT : // Enter your name : // Enter your GPA : // Student: Robert Smith; GPA: 3.56 fileno
#include <stdio.h> int main (int argc, char *argv[]) { FILE *fp1, *fp2; int fd; printf("STDIN file descriptor is %d\n",fileno(stdin)); printf("STDOUT file descriptor is %d\n",fileno(stdout)); printf("STDERR file descriptor is %d\n",fileno(stderr)); fp1 = fopen("test.txt","w"); fd = fileno(fp1); printf("File opened for 'w', feledescriptor is %d\n",fd); fp2 = fopen("test.txt","r"); fd = fileno(fp2); printf("File opened for 'r', feledescriptor is %d\n",fd); fcloseall(); return 0; } OUTPUT : // STDIN file descriptor is 0 // STDOUT file descriptor is 1 // STDERR file descriptor is 2 // File opened for 'w', feledescriptor is 3 // File opened for 'r', feledescriptor is 5 fprintf
#include <stdio.h> int main (int argc, char *argv[]) { int i = 100; unsigned int u = 250; float f = 12.5; double d = 2.897653; char ch = 'A'; char ary[] = "Array string"; char *str = "justify"; char *p; p = ary; fprintf (stdout,"Integer i = %d\n", i); fprintf (stdout,"Unsigned u = %d\n", u); fprintf (stdout,"Float f = %f\n", f); fprintf (stdout,"Double d = %.2lf\n", d); fprintf (stdout,"Scientific notation d = %e\n", d); fprintf (stdout,"Char ch = %c\n", ch); fprintf (stdout,"Array string is : %s\n", ary); fprintf (stdout,"Address of ary is : %p\n", p); fprintf (stdout,"Left %s\n", str); fprintf (stdout,"Right %20s\n",str); fprintf (stdout,"%-*s %s\n",20,"%-*s %s","test string"); fprintf (stdout,"%*s %s\n",20,"%*s %s","test string"); return 0; } OUTPUT : // Integer i = 100 // Unsigned u = 250 // Float f = 12.500000 // Double d = 2.90 // Scientific notation d = 3e+00 // Char ch = A // Array string is : Array string // Address of ary is : 0xbffff2f0 // Left justify // Right justify // %-*s %s test string // %*s %s test string fputs, puts
#include <stdio.h> int main (int argc, char *argv[]) { char *str = "Test string for puts and fputs functions"; puts(str); fputs(str,stdout); return 0; } OUTPUT : // Test string for puts and fputs functions // Test string for puts and fputs functions fread, fwrite
#include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { FILE *ptr; int len; char buff[1024]; char *str = "Testing string for fread and fwrite functions"; if ( (ptr = fopen("test.txt","wb")) == NULL ) { fprintf (stderr,"Cann't open for writing\n"); exit(EXIT_FAILURE); } len = strlen(str); if ( fwrite(str, sizeof(char), len, ptr ) != len ) { fprintf(stderr,"Error writing to file\n"); exit(EXIT_FAILURE); } fclose(ptr); if ( (ptr = fopen("test.txt","rb")) == NULL ) { fprintf (stderr,"Cann't open for reading\n"); exit(EXIT_FAILURE); } if ( fread(buff, sizeof(char), len, ptr ) != len ) { fprintf(stderr,"Error reading file\n"); exit(EXIT_FAILURE); } fclose(ptr); fputs(buff,stdout); return 0; } OUTPUT : // Testing string for fread and fwrite functions freopen
#include <stdio.h> void reop(FILE *out); int main (int argc, char *argv[]) { FILE *out; char *message = "Test reopen function"; out = fopen("test.txt","w"); fprintf(out,"%s",message); reop(out); fclose(out); return 0; }// end of main void reop(FILE *out) { char ch = 0; freopen("test1.txt", "r", out); // not same file_name while ( (ch = fgetc(out)) != EOF ) { putc(ch,stdout); } freopen("test.txt", "r", out); // same file_name while ( (ch = fgetc(out)) != EOF ) { putc(ch,stdout); } } OUTPUT : // Text from test1.txt file // Test reopen function fscanf
#include <stdio.h> int main (int argc, char *argv[]) { FILE *in; char f_name[25], l_name[25], phone [25]; int num; system("head -1 report.dat"); puts(""); in = fopen("report.dat","r"); while ( (fscanf(in,"%d%s%s%s",&num, f_name,l_name,phone)) == 4 ) { fprintf (stdout,"%04d %-12s %-12s %s\n",num, f_name,l_name,phone); } fclose(in); return 0; } OUTPUT : // 1 Linda Bain 123-3455 // 0001 Linda Bain 123-3455 // 0002 Robert Smith 345-9877 // 0003 Ivan Mazepa 456-9870 fseek
#include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { FILE *fp; int ch; /* w+ - after writing you can read file */ if ( (fp = fopen("test.txt", "w+")) == NULL) { fprintf(stderr,"Cann't open for writing\n"); exit(EXIT_FAILURE); } /* Writes letters to the file */ for (ch = 65; ch <= 90; ch++) { putc(ch, fp); } /* Skips 8 letters */ fseek(fp, 8L, SEEK_SET); ch = getc(fp); /* Changes the I to an @ */ fseek(fp, -1L, SEEK_CUR); fputc('@', fp); printf("The first character is %c\n",ch); /* Skips 16 letters, points to Q */ fseek(fp, 16L, SEEK_SET); ch=getc(fp); printf("The second character is %c\n",ch ); /* Changes the I to an @ */ fseek(fp, -1L, SEEK_CUR); fputc('@', fp); fclose(fp); return; } // The first character is I // The second character is Q fsetpos
#include <stdio.h> int main (int argc, char *argv[]) { FILE *fp; fpos_t pos; int ch; /* open file in write-read mode */ fp = fopen("test.txt","w+"); /* write message to the file */ fputs("first line\n",fp); printf ("After writing - cursors's position is %lu\n",ftell(fp)); /* save current position */ fgetpos(fp,&pos); /* put cursor to the very beginning of file */ rewind(fp); printf ("After rewind - position is %lu\n",ftell(fp)); /* put cursor to seved position */ fsetpos (fp,&pos); printf ("After fsetpos - position is %lu\n",ftell(fp)); /* write message to the file */ fputs("second line\n",fp); printf ("After writing - position is %lu\n",ftell(fp)); /* save current position */ fgetpos(fp,&pos); /* put cursor to the very beginning of file */ rewind(fp); printf ("After rewind - position is %lu\n",ftell(fp)); /* put cursor to seved position */ fsetpos (fp,&pos); printf ("After fsetpos - position is %lu\n",ftell(fp)); /* write message to the file */ fputs("third line\n",fp); printf ("After writing - position is %lu\n",ftell(fp)); /* put cursor to the very beginning of file */ rewind(fp); printf("\nContents of file:\n"); /* read file */ while ( (ch = fgetc(fp)) != EOF ) fputc(ch, stdout); fclose(fp); remove("test.txt"); return 0; } OUTPUT : // After writing - cursors's position is 11 // After rewind - position is 0 // After fsetpos - position is 11 // After writing - position is 23 // After rewind - position is 0 // After fsetpos - position is 23 // After writing - position is 34 // // Contents of file: // first line // second line // third line ftell, rewind
#include <stdio.h> int main (int argc, char *argv[]) { FILE *fp; char *msg = "Testing ftell function"; long lon; char buff[1024]; fp = fopen("test.txt","w"); fputs(msg, fp); fclose(fp); fp = fopen("test.txt","r"); lon = ftell(fp); printf ("After opening file position = %lu\n",lon); /* read 'Testing ' */ fgets(buff,9,fp); fputs(buff,stdout); puts(""); lon = ftell(fp); printf ("After reading 8 char position = %lu\n",lon); /* read next 5 char */ fgets(buff,6,fp); fputs(buff,stdout); puts(""); lon = ftell(fp); printf ("Reading next 5 char, position = %lu\n",lon); /* puts pointer to the very beginning of the file */ rewind(fp); lon = ftell(fp); printf ("After rewind position = %lu\n",lon); /* reads hole message from file */ fgets (buff, strlen(msg)+1 ,fp); fputs (buff,stdout); puts(""); lon = ftell(fp); printf ("After reading hole file position = %lu\n",lon); fclose(fp); return 0; } OUTPUT : // After opening file position = 0 // Testing // After reading 8 char position = 8 // ftell // Reading next 5 char, position = 13 // After rewind position = 0 // Testing ftell function // After reading hole file position = 22 getc, putc
#include <stdio.h> int main (int argc, char *argv[]) { int ch; printf ("Enter testing string\n"); printf ("\tCtl+d to quit : "); while ( (ch = getc(stdin)) != EOF ) { putc(ch,stdout); } puts(""); return 0; } OUTPUT : // Enter testing string // Ctl+d to quit : testing // getc function // the end getchar, putchar
#include <stdio.h> int main (int argc, char *argv[]) { int ch; printf ("\nEnter any character for testing : "); ch = getchar(); printf ("\nYou entered : "); putchar(ch); return 0; } OUTPUT : // Enter any character for testing : A // You entered : A gets
#include <stdio.h> int main (int argc, char *argv[]) { char buff[50]; gets(buff); return 0; } OUTPUT : // /tmp/cc6HCkEq.o: In function `main': // /tmp/cc6HCkEq.o(.text+0xe): the `gets' // function is dangerous and should not be used. // use `fgets' instead popen, pclose
#include <stdio.h> int main (int argc, char **argv) { char result [256]; FILE * cmdp = popen ("ps -ef | grep ana", "r"); if (!cmdp) { perror ("popen"); return 1; } while (fgets (result, sizeof(result), cmdp)) fputs (result, stdout); pclose(cmdp); return 0; } OUTPUT : // ana 1336 1335 pts/3 opera // ana 1340 1 ? gvim // ana 1349 1348 pts/2 a.out // ana 1350 1349 pts/2 sh -c ps -ef | grep ana // ana 1351 1350 pts/2 ps -ef // ana 1352 1350 pts/2 grep ana printf
#include <stdio.h> int main (int argc, char *argv[]) { int i = 100; unsigned int u = 250; float f = 12.5; double d = 2.897653; char ch = 'A'; char ary[] = "Array string"; char *str = "justify"; char *p; p = ary; printf ("Integer i = %d\n", i); printf ("Unsigned u = %d\n", u); printf ("Float f = %f\n", f); printf ("Double d = %.2lf\n", d); printf ("Scientific notation d = %.e\n", d); printf ("Char ch = %c\n", ch); printf ("Array string is : %s\n", ary); printf ("Address of ary is : %p\n", p); printf ("Left %s\n", str); printf ("Right %20s\n",str); printf ("%-*s %s\n",20,"%-*s %s","test string"); printf ("%*s %s\n",20,"%*s %s","test string"); return 0; } OUTPUT : // Integer i = 100 // Unsigned u = 250 // Float f = 12.500000 // Double d = 2.90 // Scientific notation d = 3e+00 // Char ch = A // Array string is : Array string // Address of ary is : 0xbffff2f0 // Left justify // Right justify // %-*s %s test string // %*s %s test string remove
// removing file(s) #include <stdio.h> int main (int argc, char *argv[]) { int num[] = {1,2,3}; char ext[] = ".tmp"; // file extention char file_name[50]; int i; puts("List of files:"); /* list of file in current directory */ system("ls -m"); /* create 3 files (file1.tmp, file2...) */ system("touch file{1,2,3}.tmp"); puts("\nList of files:"); system("ls -m"); for ( i = 0; i < sizeof(num)/sizeof(int); i++ ) { /* generate file_name */ sprintf(file_name,"%s%d%s","file",num[i],ext); /* remove file */ remove(file_name); } puts("\nList of files:"); system("ls -m"); return 0; } OUTPUT : // a.out, remove.c // List of files: // // List of files: // a.out, file1.tmp, file2.tmp, file3.tmp, remove.c // // List of files: // a.out, remove.c rename
// renaming file(s) #include <stdio.h> #include <string.h> int main (int argc, char **argv) { char result [256]; FILE *cmdp1, *cmdp2; int dote = '.'; char *ext; char new_file_name[50]; // list of coma separated files system ("ls -m"); // create 3 files (f1.cpp f2.cpp f3.cpp) cmdp1 = popen ("touch f{1,2,3}.cpp", "w"); if (!cmdp1) { perror ("popen"); return 1; } pclose(cmdp1); system ("ls -m"); cmdp2 = popen ("ls -1", "r"); if (!cmdp2) { perror ("popen"); return 1; } while (fgets (result, sizeof(result), cmdp2)) { // function fgets puts '\n' result[strlen(result)-1] = 0; ext = (index(result,dote)); if ( !strcmp(ext,".cpp") ) { // generate new file name sprintf(new_file_name,"%s%s",result,".tmp"); rename(result,new_file_name); } } pclose(cmdp2); system("ls -m"); return 0; } OUTPUT : // a.out, rename.c // a.out, f1.cpp, f2.cpp, f3.cpp, rename.c // a.out, f1.cpp.tmp, f2.cpp.tmp, f3.cpp.tmp, rename.c scanf
/* you have number of monet - f.e. 15 * first costs $money - f.e. 5 * second $money each - f.e. 10 * Total cost is $money - $1.05 * How many */ #include <stdio.h> int main (int argc, char *argv[]) { int wiget, col_x, col_y; int flag = 0; float x, y, total,x_cost,y_cost; printf("Enter cost of first item : "); scanf ("%f", &x); printf("Enter cost of second item : "); scanf ("%f", &y); printf("Enter number of wigets : "); scanf ("%d", &wiget); printf("Enter total cost of wigets : "); scanf ("%f", &total); for ( col_x = 0; col_x <= wiget; col_x++ ) { x_cost = col_x * x; for ( col_y = 0; col_y <= wiget; col_y++ ) { y_cost = col_y * y; if ( (x_cost + y_cost) == total && (col_x + col_y) == wiget) { printf("\tNumber %f is : %d\n",x,col_x); printf("\tNumber %f is : %d",y,col_y); printf("\n\n"); flag = 1; break; } } if ( flag ) break; } if ( !flag ) puts ("There is no variant!"); return 0; } OUTPUT : // Enter cost of first item : 5 // Enter cost of second item : 10 // Enter number of wigets : 15 // Enter total cost of wigets : 105 // Number 5.000000 is : 9 // Number 10.000000 is : 6 setbuf
#include <stdio.h> int main (int argc, char *argv[]) { char buff[BUFSIZ]; FILE *p1, *p2; p1 = fopen ("test1.txt","w"); p2 = fopen ("test2.txt","w"); setbuf ( p1, buff ); fputs ("This is buffered stream. This message will write to a disc after flushing", p1); fflush(p1); setbuf ( p2, NULL ); fputs ("This is unbuffered stream. You don't need to flush it.", p2); fcloseall(); return 0; } OUTPUT : snprintf
#include <stdio.h> int main (int argc, char *argv[]) { int i = 0, n = 4; char *s[] = {"first string", "second string", "third string"}; char buff[255]; for ( ; i < 3; i++ ) { snprintf(buff, n, "%s", s[i]); fprintf (stdout,"%s\n", buff); n += n; } return 0; } OUTPUT : // fir // second // third string sprintf
#include <stdio.h> int main (int argc, char *argv[]) { int i = 100; double d = 2.5; char ch = 97; char *s = "Test"; char buff[255]; sprintf (buff,"\t\t\tinteger i = %d\n\ double d = %f\n\ char ch = %c\n\ string s = %s", i, d, ch, s); puts(buff); return 0; } OUTPUT : // integer i = 100 // double d = 2.500000 // char ch = a // string s = Test sscanf
#include <stdio.h> #include <stdlib.h> int main (void) { char a[20]="12/10/2000", b[]="300023"; char j[3],k[3],l[3]; char c[3],d[5]; char s,s1; int p, p1, p2; sscanf(a,"%2s%1s%2s%1s%4s",j,l,k,c,d); printf ("\n%d%s%d%s%d\n", atoi(j),l,atoi(k),c,atoi(d)); sscanf(b,"%4d%d",&p,&p1); printf("%d %d\n",p,p1); sscanf(a,"%d%c%d%c%d",&p,&s,&p1,&s1,&p2); printf("%d %c %d %c %d\n",p,s,p1,s1,p2); return 0; } OUTPUT : // 12/10/2000 // 3000 23 // 12 / 10 / 2000 tmpfile
// generating temporary file name #include <stdio.h> int main (int argc, char *argv[]) { char buff[50]; FILE *tmp; // tmpfile will automatically deleted tmp = tmpfile(); fputs("Anatoliy",tmp); // puts pointer to the beginning of file rewind(tmp); fgets(buff,sizeof("Anatoliy"),tmp); fputs(buff,stdout); fclose(tmp); return 0; } OUTPUT : // the use of 'tmpnam' is dangerous, // better use 'mkstemp' // // File name is: /tmp/filev9pLLj // Anatoliy tmpnam, tempname
// generating temporary file_name #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { char *pwd; char *tmp_nam; char *temp_nam; tmp_nam = tmpnam(NULL); fputs(tmp_nam,stdout); fputs("\n",stdout); // 2 argc: 1 - *dir, 2 - *filename temp_nam = tempnam(NULL,NULL); fputs(temp_nam,stdout); fputs("\n",stdout); pwd = getenv("PWD"); temp_nam = tempnam(pwd,NULL); fputs(temp_nam,stdout); fputs("\n",stdout); return 0; } OUTPUT : // gcc -Wall tmpnam.c &> err // cat err // /tmp/cc8s4zsp.o: In function `main': // /tmp/cc8s4zsp.o(.text+0xc): the use of `tmpnam' // is dangerous, better use `mkstemp' // /tmp/cc8s4zsp.o(.text+0x4b): the use of `tempnam' // is dangerous, better use `mkstemp' // // /tmp/file9PxPwR // /tmp/fileyVVxcB // /home/ana/C/Stdio/fileBdahUk ungetc
/* using ungetc function */ #include <stdio.h> #include <stdlib.h> #include <ctype.h> int main (int argc, char *argv[]) { int c; double d, sum= 0; char buff[50]; FILE *p; puts("Contents of test.txt"); /* without `fflush' message from `system' will print first */ fflush(stdout); system ("cat test.txt"); puts("\n"); /* file has ':' field separator. Instead of usig `strtok', I use `ungetc' function */ p = fopen("test.txt","r"); while ( !feof (p) ) { c = fgetc(p); if ( feof(p) ) break; /* change ':' for ' ' */ if ( c == ':' ) c = ' '; if ( isdigit(c) ) { /* put back character */ ungetc(c,p); /* read hole number */ fgets(buff,sizeof(double),p); d = strtod(buff,(char**)NULL); printf(" %.2lf\n",d); sum += d; } else putc(c,stdout); } fclose(p); printf ("=========== total : $%.2lf\n",sum); return 0; } OUTPUT : // Contents of test.txt // Robert Smith:67500 // Linda Bain:79200 // Ivan Mazepa:42000 // // // Robert Smith 67500.00 // Linda Bain 79200.00 // Ivan Mazepa 42000.00 // =========== total : $188700.00