fopen() not working in C

2019-01-28 22:49发布

问题:

I got it fixed. Thanks for all the help.

I've now looked through quite a few articles, forum posts and topics here; however, none have actually fixed my issue. The problem is that my fopen("file.txt", "w"); doesn't create the file.

Code:

//
//Includes
#include <stdio.h>

int main ()
{
    FILE *receipt = fopen("receipt.txt", "w");

    //Create file
    fprintf(receipt, "Price: %.2f$", purchase);
    fprintf(receipt, "\nDiscount: %.2f$", discount);
    fprintf(receipt, "\nTax %%: %.2f%%", tax_pct);
    fprintf(receipt, "\nTaxes: %.2f$", tax);
    fprintf(receipt, "\nTotal Price: %.2f$", end_price);
    fprintf(receipt, "\n\nEnd of Receipt.");
    fclose(receipt);

    return 0;
}

I've tried throwing in

if(!receipt) {
    printf("Error!");
}
else {
    fprintf(blabla);
}

But to no avail.

It simply does not create the file :/ Running in Xcode and on Mac. No warnings/notices or otherwise stuff to give me any idea of what is wrong.

*I tried adding system("pwd") to figure out if it didn't save it where it should save it, but I have a hard time actually finding that directory (I don't know if it's temp, but even so the file should be there?). Obviously I wasn't questioning the actual validity of the library, duh, implicit that it was the fopen I was using not giving me what I expected?

I can't make perror give me any useful information. Everything would appear to work as it should; I just don't get a file. Please avoid any more smartass comments, if you don't want to help just don't write.*

Also, I removed all code, but the actual fopen() and fprintf().

回答1:

Try perror. It's possible you don't have permissions or something like that.

FILE *receipt = fopen("receipt.txt", "w");
if (!receipt)
    perror("fopen");


回答2:

The only explanations that makes sense are that you don't have permissions to create the file in the working directory, or the working directory is not where you are looking for the file to be created.

fopen() not working

Well, of course it works. You shouldn't get in the mindset that the standard library doesn't work.

No warnings/notices or otherwise stuff to give me any idea of what is wrong.

You did not check for errors after calling fopen(). If you don't check for errors, how do you expect them to be delivered to you?



回答3:

The file is created, but not where you expect it to be.

Check the working directory (getcwd).



回答4:

You should use strerror to format the error yourself or perror to print the system error matching with the errno.

man errno may help you



标签: c fopen