Lab 10 (C Programming) Solution
Mar 7, 2019programs written here are compiled and run in gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0
1)Write characters into a file “file.txt”. The set of characters are read from the keyboard until an enter key is pressed (use putc() and getc() function).
Source Code:
#include <stdio.h> #include <stdlib.h> int main() { char ch; FILE *file_pointer; file_pointer = fopen("file.txt", "w"); if(file_pointer == NULL){ printf("failed to open file."); exit(1); } do{ ch = getchar(); putc(ch, file_pointer); }while(ch != '\n'); fclose(file_pointer); return 0; }
Output:
hello this is the string written in file file.txt
2)Read characters from file “file.txt” created in question 1. Also count the number of characters in the file.
Source Code:
#include <stdio.h> #include <stdlib.h> int main() { char ch; FILE *file_pointer; file_pointer = fopen("file.txt", "r"); if(file_pointer == NULL){ printf("failed to open file."); exit(1); } while(1){ ch = getc(file_pointer); if(ch == EOF){ break; } printf("%c", ch); } fclose(file_pointer); return 0; }
Output:
hello this is the string written in file file.txt
3)Write name, age and height of a person into a data file “person.txt” and read it (use fprintf() and fscanf() function).
Source Code:
#include <stdio.h> #include <stdlib.h> int main() { char name[20]; int age; float height; FILE *file_pointer; file_pointer = fopen("person.txt", "w"); if(file_pointer == NULL){ printf("failed to open file."); exit(1); } printf("Enter name:"); scanf("%s", name); printf("Enter Age:"); scanf("%d", &age); printf("Enter height:"); scanf("%f", &height); fprintf(file_pointer, " %s %d %f", name, age, height); fclose(file_pointer); file_pointer = fopen("student.txt", "r"); if(file_pointer == NULL){ printf("failed to open file."); exit(1); } printf("Information read from file are :\n\n"); fscanf(file_pointer, " %s %d %f", name, &age, &height); printf("Name:%s\n", name); printf("Age:%d\n", age); printf("Height:%f\n", height); fclose(file_pointer); return 0; }
Output:
Enter name:hari Enter Age:23 Enter height:23.234 Information read from file are : Name:hari Age:23 Height:23.233999
4)Write a program to read the file “file.txt” (already existed), convert all the lowercase alphabets to uppercase and write to the same file.
Source Code:
#include <stdio.h> #include <stdlib.h> int main(){ char file_name[] = "file.txt"; char ch; FILE *fptr; fptr = fopen(file_name, "r+"); if(fptr == NULL){ printf("Failed to open file."); exit(1); } while(1){ ch = getc(fptr); if(ch == EOF){ break; } fseek(fptr, -1, 1); if(ch >= 97 && ch <= 122){ ch -= 32; } putc(ch, fptr); } fclose(fptr); printf("See the file.txt in the directory, where your source exists.\n"); return 0; }
Output:
See the file.txt in the directory, where your source exists.
5)Write a program to store the 8 student information (name, roll and marks) read from the user to a file called “student.txt”.
Source Code:
#include <stdio.h> #include <stdlib.h> #define N 8 struct student{ char name[20]; int roll; float marks; }; int main() { char file_name[] = "student.txt"; FILE *file_ptr; int i; file_ptr = fopen(file_name, "w"); if(file_ptr == NULL){ printf("Failed to open a file."); exit(1); } struct student s[N]; printf("Enter student information:\n\n"); for(i = 0; i < N; i++){ printf("Student: %d\n", i+1); printf("Enter Name:"); scanf(" %[^\n]", s[i].name); printf("Enter Roll:"); scanf(" %d", &s[i].roll); printf("Enter Marks:"); scanf(" %f", &s[i].marks); fwrite(&s[i], sizeof(struct student), 1, file_ptr); } fclose(file_ptr); return 0; }
Output:
Enter student information: Student: 1 Enter Name:hari sundar Enter Roll:1 Enter Marks:12.345 Student: 2 Enter Name:ram karki Enter Roll:2 Enter Marks:456 Student: 3 Enter Name:abhinav gautam Enter Roll:3 Enter Marks:45.565 Student: 4 Enter Name:bidhan sthapit Enter Roll:5 Enter Marks:89.567 Student: 5 Enter Name:ritu sarkini Enter Roll:6 Enter Marks:45.555 Student: 6 Enter Name:ramesh sapkota Enter Roll:7 Enter Marks:50.666 Student: 7 Enter Name:hari timilsina Enter Roll:8 Enter Marks:45.4545 Student: 8 Enter Name:rita khanal Enter Roll:9 Enter Marks:45.6666
6)Write a program to open the file “student.txt” created in the problem 5, implement the searching mechanism with the roll number and display the matched information.
Source Code:
#include <stdio.h> #include <stdlib.h> #define N 8 struct student{ char name[20]; int roll; float marks; }; int main() { char file_name[] = "student.txt"; FILE *file_ptr; int i, roll_search; struct student temp; file_ptr = fopen(file_name, "r"); if(file_ptr == NULL){ printf("Failed to open a file."); exit(1); } printf("Enter the roll number to search:"); scanf("%d", &roll_search); for(i = 0; i < N; i++){ fread(&temp, sizeof(struct student), 1, file_ptr); if(roll_search == temp.roll){ printf("Record found:\n\n"); printf("Name: %s\n", temp.name); printf("Roll : %d\n", temp.roll); printf("Marks : %f\n", temp.marks); exit(0); } } printf("Record not found:\n"); fclose(file_ptr); return 0; }
Output:
Enter the roll number to search:7 Record found: Name: ramesh sapkota Roll : 7 Marks : 50.666000
7)Write a program to open the file “student.txt” created in the problem 5, implement the sorting and store to the file called “sorted_student.txt”.
Source Code:
#include <stdio.h> #include <stdlib.h> #define N 8 struct student{ char name[20]; int roll; float marks; }; int main() { char file_name[] = "student.txt", sorted_file[] = "sorted_student.txt"; FILE *file_ptr; int i, j, roll_search; struct student s[N], temp; file_ptr = fopen(file_name, "r"); if(file_ptr == NULL){ printf("Failed to open a file."); exit(1); } printf("Reading information to student array from file:\n"); for(i = 0; i < N; i++){ fread(&s[i], sizeof(struct student), 1, file_ptr); } fclose(file_ptr); /* sorting the information based on marks*/ for(i = 0; i < N-1; i++){ for(j = i; j < N; j++) { if(s[i].marks < s[j].marks){ temp = s[i]; s[i] = s[j]; s[j] = temp; } } } file_ptr = fopen(sorted_file, "w"); if(file_ptr == NULL){ printf("Failed to open sorted file."); exit(1); } /* writing sorted list and also displaying */ printf("Sorted Information are :\n\n\n\n"); for(i = 0; i < N; i++){ fwrite(&s[i], sizeof(struct student), 1, file_ptr); /* also displaying the information */ printf("Name: %s\n", s[i].name); printf("Roll: %d\n", s[i].roll); printf("Marks: %f\n", s[i].marks); } fclose(file_ptr); return 0; }
Output:
Reading information to student array from file: Sorted Information are : Name: ram karki Roll: 2 Marks: 456.000000 Name: bidhan sthapit Roll: 5 Marks: 89.567001 Name: ramesh sapkota Roll: 7 Marks: 50.666000 Name: rita khanal Roll: 9 Marks: 45.666599 Name: abhinav gautam Roll: 3 Marks: 45.564999 Name: ritu sarkini Roll: 6 Marks: 45.555000 Name: hari timilsina Roll: 8 Marks: 45.454498 Name: hari sundar Roll: 1 Marks: 12.345000