Я пытаюсь записать файл на C, так что это довольно просто. Но я столкнулся с проблемой в приведенном ниже коде:
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fptr;
int num;
fptr = fopen("C:\\test.txt","w");
if (fptr == NULL)
{
printf("Error!");
exit(1);
}
printf("Enter your number");
scanf("%d",&num);
printf("Your number is: %d",&num);
fprintf(fptr,"%d",num);
fclose(fptr);
return 0;
}
Он никогда не печатает значение num
, а текстовый файл всегда оказывается с неверным значением.
Я снова и снова пытался решить проблему, меняя введенные в нее значения, пытаясь возиться с компилятором MGM, который я использую, чтобы проверить, не является ли это проблемой компилятора, но безрезультатно. Я даже пытался скопировать другой код C, записывающий в текстовые файлы, но столкнулся с той же проблемой.
Всегда пишет просто 0. Когда я запускаю его, это выглядит так:
Enter your number3
3
Your number is: 3
Но вводимое значение всегда равно 0.
Пожалуйста, возьмите полный ввод и вывод консоли и скопируйте и вставьте его (как текст) в свой вопрос.
Кстати: printf("Your number is: %d",&num)
... Вы уверены, что здесь следует использовать оператор указателя на &
?
В том то и проблема - выхода нет. Я просто ввожу число, и программа завершается.
Попробуйте что-нибудь еще проще: функцию main
с одним printf("Hello world\n");
. Это работает? Как вы строите? Как ты бежишь?
Добавленный вами вывод четко показывает '3'
в качестве входных и выходных данных. Что означает, когда вы пишете «Он всегда пишет только 0». и «Но вводимое значение всегда равно 0».
Возможно, вы путаете вывод с кодом завершения программы (что возвращает функция main
)?
Предложение: можете ли вы переписать свою программу как фильтр ? Вместо того, чтобы писать и в stdout
, и в файл, просто записывайте в stdout
. Если пользователю действительно нужен файл, он может это сделать so78671731.exe > C:\test.txt
Функция printf
ожидает значение самого num
, а не адреса num
. Передача адреса num
вызывает неопределенное поведение, что приводит к неправильному выводу.
Вам следует просто отказаться от оператора &
.
Должен быть:
printf("Your number is: %d", num);
вместо:
printf("Your number is: %d", &num);
Кстати: вы сделали это правильно в fprintf(fptr,"%d",num)
.
printf("Your number is: %d", &num);
Оператор амперсанд используется для печати адреса переменной num
.
Если вы хотите напечатать значение num
, вам следует написать
printf("Your number is: %d", num);
Вы не проверяете возвращаемое значение из
scanf()
, поэтому не знаете, было ли значение прочитано правильно или нет.