Итак, проблема, с которой я столкнулся, заключается в том, что одно из целых случайных чисел печатается дважды, но только во втором операторе 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. Я также ожидаю, что решение также будет простым.
эта версия вашего кода работает правильно или нет?
Похоже, вы печатаете либо sum1
, либо sum2
(или оба), когда он не инициализирован на первой итерации. Если вы введете 3 или что-нибудь кроме 1 или 2, оба будут неинициализированы. Вы должны проверить результат с помощью scanf()
— также неплохо распечатать то, что прочитала программа, чтобы убедиться, что она получила то, что вы ожидали.
Выражение sum1 = starting_numbers10 - starting_numbers10 + gamecards;
выглядит так, как будто оно оценивается так же, как sum1 = gamecards;
, и аналогично выражению sum2
. Это намеренно? Какова цель?
ОБНОВЛЕНИЕ: Во-первых, я хочу поблагодарить Грега Спирса и Дбуша, потому что код на самом деле работает нормально. Я просто никогда не добавлял новую строку, поэтому он продолжал печатать целое число и новое целое число рядом друг с другом, поэтому я бы никогда не заметил, так что спасибо!
Также, чтобы ответить на ваш вопрос, Джонатан Леффлер, я создаю игру под названием Rack-o, вот ссылка на правила игры youtube.com/watch?v=1khxVK2Evks смысл стартовых чисел в том, что это числа вы получаете вначале, которое затем вы должны заменить, получая новые карты в порядке возрастания, и, если все карты расположены в порядке возрастания, вы выигрываете.
Но я признаю, что вы можете просто указать sum1 = gamecards; поскольку он достигает той же цели, и в настоящее время я использую его в полной игре.
sum1
и sum2
не инициализируются при первом использовании.printf("2 new sum: %d", sum2);
не имеет символа новой строки в конце строки формата. Это приведет к тому, что выходные данные printf("%d\n", gamecards);
будут смешаны с ним.Обычным последствием вызова неопределенного поведения являются носовые демоны.
В то время, когда существовал Usenet, я был недостаточно развит, чтобы пользоваться компьютером. Я думал о видео Разделить на ноль о взрыве AVR, но теперь я знаю, что взрыв вызвало просто перенапряжение.
Ни я, знание истории не позволяет избежать повторения ошибок. :-D
Попробуйте добавить
\n
в конец строки формата.