C Programming - Input / Output - Discussion
Discussion Forum : Input / Output - General Questions (Q.No. 7)
7.
On executing the below program what will be the contents of 'target.txt' file if the source file contains a line "To err is human"?
#include<stdio.h>
int main()
{
int i, fss;
char ch, source[20] = "source.txt", target[20]="target.txt", t;
FILE *fs, *ft;
fs = fopen(source, "r");
ft = fopen(target, "w");
while(1)
{
ch=getc(fs);
if(ch==EOF)
break;
else
{
fseek(fs, 4L, SEEK_CUR);
fputc(ch, ft);
}
}
return 0;
}
Answer: Option
Explanation:
The file source.txt is opened in read mode and target.txt is opened in write mode. The file source.txt contains "To err is human".
Inside the while loop,
ch=getc(fs); The first character('T') of the source.txt is stored in variable ch and it's checked for EOF.
if(ch==EOF) If EOF(End of file) is true, the loop breaks and program execution stops.
If not EOF encountered, fseek(fs, 4L, SEEK_CUR); the file pointer advances 4 character from the current position. Hence the file pointer is in 5th character of file source.txt.
fputc(ch, ft); It writes the character 'T' stored in variable ch to target.txt.
The while loop runs three times and it write the character 1st and 5th and 11th characters ("Trh") in the target.txt file.
Discussion:
21 comments Page 2 of 3.
Vaibhav said:
1 decade ago
I would say that it is better to think in terms of index rather than the number of the character in file. See it as first when the while loop starts T is stored in ch as it is at 0 index. Then, fgetc increases the pointer by 1 and then fseek increases the pointer by 4 which makes the value at index 5 to be stored in ch and the same happens for the next time when the character at index 10 is stored in ch. Thus, it makes 'Trh'. As simple as that :D.
Anupss said:
1 decade ago
Here while loop executes only three times because, if it executes 4th time then EOF in which program execution stops and condition will be false.
Judaism said:
1 decade ago
It will write 1st and 6th and 11th, not "1st and 5th and 11th".
first loop: getc will store 'T' to ch and advances 1 character, then fseek will advances 4 character. it total 5 advances from 1st. so it will write 6th for the second loop
first loop: getc will store 'T' to ch and advances 1 character, then fseek will advances 4 character. it total 5 advances from 1st. so it will write 6th for the second loop
Judaism said:
1 decade ago
ch=getc(fs); the file pointer advances 1 character. so it will be 1st. 6th and 11th.
Radhika said:
1 decade ago
Can anyone explain why while loop runs three times?
Radhika said:
1 decade ago
Can anyone explain why while loop runs three times?
Aditi said:
1 decade ago
Can any one explain me that - Why while loop execute three times. Act I didn't understand the condition i.e. while (1).
Please clarify my doubt. Thanks in advance.
Please clarify my doubt. Thanks in advance.
Nnnnn said:
1 decade ago
Can anyone explain about it please, how 1st, 5th and 11th character will print.
Hemc said:
1 decade ago
It will be 1st. 6th and 11th.
Because after that it skip 4 char including space and then after are it skip 4 char including two spaces and print h.
Because after that it skip 4 char including space and then after are it skip 4 char including two spaces and print h.
Amitava said:
1 decade ago
I also doubtful about the problem.Please clarify anyone.
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers