Проблема с записью в текстовый файл в C с помощью printf()

Я пытаюсь записать файл на 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.

Вы не проверяете возвращаемое значение из scanf(), поэтому не знаете, было ли значение прочитано правильно или нет.

Andrew Henle 26.06.2024 12:11

Пожалуйста, возьмите полный ввод и вывод консоли и скопируйте и вставьте его (как текст) в свой вопрос.

Some programmer dude 26.06.2024 12:14

Кстати: printf("Your number is: %d",&num)... Вы уверены, что здесь следует использовать оператор указателя на &?

Some programmer dude 26.06.2024 12:16

В том то и проблема - выхода нет. Я просто ввожу число, и программа завершается.

Owl 26.06.2024 12:16

Попробуйте что-нибудь еще проще: функцию main с одним printf("Hello world\n");. Это работает? Как вы строите? Как ты бежишь?

Some programmer dude 26.06.2024 12:18

Добавленный вами вывод четко показывает '3' в качестве входных и выходных данных. Что означает, когда вы пишете «Он всегда пишет только 0». и «Но вводимое значение всегда равно 0».

Gerhardh 26.06.2024 12:46

Возможно, вы путаете вывод с кодом завершения программы (что возвращает функция main)?

Some programmer dude 26.06.2024 13:03

Предложение: можете ли вы переписать свою программу как фильтр ? Вместо того, чтобы писать и в stdout, и в файл, просто записывайте в stdout. Если пользователю действительно нужен файл, он может это сделать so78671731.exe > C:\test.txt

pmg 26.06.2024 13:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
90
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Функция 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);

Другие вопросы по теме