Я новичок в C, и я делаю простой код для получения случайного числа. Я пытался сделать игру более или менее (случайное число, и игрок пишет число), но когда я запускаю код в терминале, я всегда получаю одно и то же число. Это нормально? А если нет, как это исправить?
#include <stdio.h>
#include <stdlib.h>
int main() {
int essais = 10;
int secret;
int number;
int win = 0;
secret = rand()%100;
while (essais > 0 && win != 1){
printf("Quel est le nombre secret ? \n");
scanf("%d",&number);
if (number == secret){
printf("Gagné !\n");
win++;
}
else if (number < secret) {
printf("Non c'est plus :/\n");
essais--;
printf("Il vous reste %d essais\n",essais);
}
else{
printf("Non c'est moins :/\n");
essais--;
printf("Il vous reste %d essais\n",essais);
}
if (essais == 0)
printf("Vous n'avez plus d'essais :(, vous aurez plus de chance la prochaine fois. Le nombre était %d",secret);
}
}
PS: Извините, я француз, поэтому я написал код и сообщения на французском языке, но проблема не здесь
В первую очередь вам не хватает семян, как сказано в другом ответе без этогоrand()
будет генерировать одно и то же число каждый раз.
srand();
Во-вторых, конечно, он даст вам тот же номер, когда вы генерируете случайное число только один раз.
secret = rand()%100;
копироватьsecret = rand()%100;
где-то внутри цикла, и вы получите случайные числа, но вам нужно будет иметь семя перед циклом.
Следовательно, попробуйте это:
#include <stdio.h>
#include <stdlib.h>
int main() {
srand(time(NULL));
int essais = 10;
int secret;
int number;
int win = 0;
secret = rand()%100;
while (essais > 0 && win != 1){
printf("Quel est le nombre secret ? \n");
scanf("%d",&number);
if (number == secret){
printf("Gagné !\n");
win++;
}
else if (number < secret) {
printf("Non c'est plus :/\n");
essais--;
printf("Il vous reste %d essais\n",essais);
}
else{
printf("Non c'est moins :/\n");
essais--;
printf("Il vous reste %d essais\n",essais);
}
if (essais == 0)
printf("Vous n'avez plus d'essais :(, vous aurez plus de chance la prochaine fois. Le nombre était %d",secret);
}
}
Еще кое-что для вас, bitte, s'il te plaît, я не знаю вашего языка, поэтому, пожалуйста, ставьте комментарии рядом с переменными иprintf
заявления.
win == 1
Да, rand () сам по себе повторяет сгенерированные числа, поэтому вам нужно использовать это:
srand(time(0)); //use this line only once
//and then after that use the rand() function again
//You will also need to include time.h library above
Большое спасибо ! Это действительно помогло мне :) Еще раз спасибо. Я, конечно, переведу то, что сказал, но основное
#include <stdio.h>
#include <stdlib.h>
int main() {
srand(time(NULL));
int essais = 10; // tries
int secret;
int number;
int win = 0;
secret = rand()%100;
while (essais > 0 && win != 1){
printf("Quel est le nombre secret ? \n"); // what is the secret number ?
scanf("%d",&number);
if (number == secret){
printf("Gagné !\n"); // won
secret = rand()%100;
win++;
}
else if (number < secret) {
printf("Non c'est plus :/\n"); // No, that's more
essais--;
printf("Il vous reste %d essais\n",essais); // You have ... tries left
}
else{
printf("Non c'est moins :/\n"); // No that's less
essais--;
printf("Il vous reste %d essais\n",essais);
}
if (essais == 0)
printf("Vous n'avez plus d'essais :(, vous aurez plus de chance la prochaine fois. Le nombre était %d",secret); // You don't have tries anymore, better luck next time
}
}
#include <time.h>
для правильного прототипа функции time()
.
time()
принимает указатель на time_t
и возвращает значение time_t
Без правильного прототипа в области видимости (без #include
) компилятор будет предполагать, что и возвращаемое значение, и аргументы имеют тип int
. int
не взаимозаменяем с time_t
или time_t*
. То, что программа «работает», - всего лишь неудачное проявление Undefined Behavior .
srand(time(NULL));
В противном случае вы будете каждый раз получать одну и ту же (неслучайную) последовательность, что полезно только при отладке. Weather Vanesrand()
, это эквивалентноsrand(1)
. Keith Thompson