Вопрос по c – несколько scanf в программе, вызывающей сбой в c?

0
#include <stdio.h>

int main()
{       
    printf("how old are you? ");
    int age = 0;
    scanf("%d", age);

    printf("how much does your daily habit cost per day? \n");
    int daily = 0;
    scanf("%d", daily); 

    double thisyear = daily * 365;

    printf("\n");
    printf("this year your habit will cost you: %.2f", thisyear);

    return 0;
}

это моя программа для школы, когда я пишу это, я пытаюсь заставить пользователя 1, указать его возраст и 2, их ежедневную стоимость жизни. Однако моя программа будет зависать при запуске этого

для второй части предполагается, что она будет printf (& quot; сколько ваша ежедневная привычка стоит в день? \ n & quot;); плавать ежедневно = 0; scanf ("%. 2f", ежедневно); Tianyou Hu

Ваш Ответ

3   ответа
3

scanf("%d", daily);

должен стать

scanf("%d", &daily);

Вам нужно передать адрес переменной (то есть указатель, это делается с помощью&) чтобыscanf так что значение переменной можно изменить. То же самое относится и к вашей другой подсказке. Измените это на

scanf("%d", &age);

Теперь вы должны получить это при запуске вашей программы:

% a.out
how old are you? 30
how much does your daily habit cost per day? 
20

this year your habit will cost you: 7300.00
ааа спасибо, однако, когда я запускаю программу, теперь она дает мне 0,00 Tianyou Hu
@TianyouHu Я только что запустил исправленную версию, и она сработала. Можете ли вы рассказать мне больше о проблеме и как вы получаете 0,00?
@TianyouHu Если этот ответ помог вам с вашей проблемой / вопросом, пожалуйста, примите его - это даст вам и мне несколько очков репутации и пометит этот вопрос как решенный. Вы можете сделать это, нажав на галочку рядом с моим ответом - или посмотреть эту ссылку:meta.stackexchange.com/questions/5234/…
0

scanf работает со ссылками на переменные

printf("how old are you? ");
int age = 0;
scanf("%d", &age);

printf("how much does your daily habit cost per day? \n");
int daily = 0;
scanf("%d", &daily); 

double thisyear = daily * 365;

printf("\n");
printf("this year your habit will cost you: %.2f", thisyear);
1

Функция scanf ожидает указатель.

scanf("%d", &age);

То же самое касается строки, где вы сканируете "ежедневно".

@ user411313 - Хммм ... Кажется, я помню, что исправляю общую ошибку, но теперь она ускользает от меня. Я просто уберу это из ответа, пока не смогу вспомнить, почему ... возможно, придется выкопать книгу.
-1 ваше пространство перед & quot;% d & quot; является избыточным, одиночный "% d" будутever игнорировать все пробельные символы заголовка перед любым целочисленным литералом во входном потоке
@ user411313 - Это цитируется в этой книге как таковое. (amazon.com/C-Example-Greg-Perry/dp/0789722399/… Но, судя по всему, я не могу вспомнить или воспроизвести типичную ошибку, которую помогает уменьшить начальное пространство в элементе управления scanf. Что-то делать с конечными или ведущими пробелами при вводе. Может быть разрешен начальный пробел при чтении символ за символом одновременно с% c. Я просто напишу автору письмо, если смогу его разыскать!

Похожие вопросы