Печать целых чисел дважды в одном операторе printf в программе на языке C

Итак, проблема, с которой я столкнулся, заключается в том, что одно из целых случайных чисел печатается дважды, но только во втором операторе printf в программе внизу. Этот код также является всего лишь тестом для игры Rack-O, которую я воссоздаю в c. Так что, если я или кто-то еще сможет понять, как заставить этот код работать, полная версия игры тоже будет работать. ПРИМЕЧАНИЕ. Если мой код выглядит плохо, то это потому, что я немного новичок в программировании.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <string.h>


int main(){
    int game = 1;
    srand(time(0));
    const int MIN = 1;
    const int MAX = 60;
    int starting_numbers10 = (rand() % MAX) + MIN;
    int starting_numbers9 = (rand() % MAX) + MIN;
    int sum1;
    int sum2;

    while(game == 1){
        int gamecards = (rand() % MAX) + MIN;
        int start;

        printf("%d\n", gamecards);
        printf("do you want to change numbers 1 or 2 : ");
        scanf("%d", &start);

        if (start == 1){
            sum1 = starting_numbers10 - starting_numbers10 + gamecards;
        }
        else if (start == 2){
            sum2 = starting_numbers9 - starting_numbers9 + gamecards;
        }
        printf("1 new sum: %d\n", sum1);
        printf("2 new sum: %d", sum2); // <-- example of what it prints (523) 52 being its own integer and 3 being the integer that sum1 can become if you select to change sum1

    }
}

За последние несколько дней я пробовал много разных комбинаций кода, часами пытаясь решить проблему, но мне так и не удалось ее решить. Скорее всего, я слишком неопытен, чтобы знать, что делать, но я не оставил попыток. Но я ожидаю, что он покажет два случайных целых числа, а не 3. Я также ожидаю, что решение также будет простым.

Попробуйте добавить \n в конец строки формата.

dbush 18.07.2024 04:18

эта версия вашего кода работает правильно или нет?

greg spears 18.07.2024 04:36

Похоже, вы печатаете либо sum1, либо sum2 (или оба), когда он не инициализирован на первой итерации. Если вы введете 3 или что-нибудь кроме 1 или 2, оба будут неинициализированы. Вы должны проверить результат с помощью scanf() — также неплохо распечатать то, что прочитала программа, чтобы убедиться, что она получила то, что вы ожидали.

Jonathan Leffler 18.07.2024 04:38

Выражение sum1 = starting_numbers10 - starting_numbers10 + gamecards; выглядит так, как будто оно оценивается так же, как sum1 = gamecards;, и аналогично выражению sum2. Это намеренно? Какова цель?

Jonathan Leffler 18.07.2024 04:41

ОБНОВЛЕНИЕ: Во-первых, я хочу поблагодарить Грега Спирса и Дбуша, потому что код на самом деле работает нормально. Я просто никогда не добавлял новую строку, поэтому он продолжал печатать целое число и новое целое число рядом друг с другом, поэтому я бы никогда не заметил, так что спасибо!

Dusty 18.07.2024 04:44

Также, чтобы ответить на ваш вопрос, Джонатан Леффлер, я создаю игру под названием Rack-o, вот ссылка на правила игры youtube.com/watch?v=1khxVK2Evks смысл стартовых чисел в том, что это числа вы получаете вначале, которое затем вы должны заменить, получая новые карты в порядке возрастания, и, если все карты расположены в порядке возрастания, вы выигрываете.

Dusty 18.07.2024 04:58

Но я признаю, что вы можете просто указать sum1 = gamecards; поскольку он достигает той же цели, и в настоящее время я использую его в полной игре.

Dusty 18.07.2024 05:54
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • sum1 и sum2 не инициализируются при первом использовании.
    Результат при попытке доступа к значению неинициализированной переменной: Неопределено.
    «Поведение не определено» означает, что по закону может произойти что угодно, например, получение странного значения, сбой вашей программы или даже взрыв вашей физической машины.
    Инициализируйте их значением 0, чтобы все работало правильно.
  • printf("2 new sum: %d", sum2); не имеет символа новой строки в конце строки формата. Это приведет к тому, что выходные данные printf("%d\n", gamecards); будут смешаны с ним.

Обычным последствием вызова неопределенного поведения являются носовые демоны.

the busybee 18.07.2024 11:57

В то время, когда существовал Usenet, я был недостаточно развит, чтобы пользоваться компьютером. Я думал о видео Разделить на ноль о взрыве AVR, но теперь я знаю, что взрыв вызвало просто перенапряжение.

CDnX 19.07.2024 03:09

Ни я, знание истории не позволяет избежать повторения ошибок. :-D

the busybee 19.07.2024 08:25

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