Reputation: 224
I have a program (console), where I put all the text in a separate .txt file.
I use fgets()
to read a string from the file, but when the file contains a \n and I later print the string, it prints \n instead of a linebreak
Here is an example:
FILE* fic = NULL;
char str[22]; //str is the string we will use
//open the file
fic = fopen ("text.txt", "r");
//read from the file
fgets(str, size, fic);
printf(str);
If this is what I have in my text.txt:
This is \n an example
However what comes out on the console is
This is \n an example
Instead of
This is
an example
Edit: in the file it's written as \n. I also tried addint \ or \t in the file but it would print \ and \t instead of a tabulation or a single back-slash
Upvotes: 0
Views: 3672
Reputation: 1
The compiler is scanning the text file and storing the data/text as it is in str string. The compiler does not take \n
as an escape sequence. So if you want to go to the next line whenever \n
appears then you should scan character by character, and if \n
appears you should printf("\n")
.
#include <stdio.h>
int main(){
char str[30];
int i = 0;
FILE *fic = NULL;
fic = fopen("text.txt", "r");
while(!feof(fic)){
str[i++] = getc(fic);
if(i > 30){ //Exit the loop to avoid writing outside of the string
break;
}
}
str[i - 1] = '\0';
fclose(fic);
for(i = 0; str[i] != '\0'; i++){
if(str[i] == 'n' && str[i - 1] == '\\'){
printf("\n");
continue;
}
if(str[i] == '\\' && str[i + 1] == 'n'){
printf("\n");
continue;
}
printf("%c",str[i]);
}
return 0;
}
Upvotes: 0
Reputation: 44
fgets just sees the \ and the n as normal characters. You have to translate it by your self to a linefeed character. Maybe with help of strstr() or similar.
Upvotes: 3
Reputation: 409136
That's because escape characters in string and character literals are handled by the compiler when it parses your code. It's not something that exists in the library or run-time code for all strings.
If you want to translate e.g. the two characters \n
that you read from a file, then you need to handle it yourself in your code. For example by going over the string character by character and looking for '\\'
followed by 'n'
.
Upvotes: 1