2016-11-29 3 views
1

Я хочу сделать функцию в C, но невежественный, что делать я знаю, как сделать это с целыми числами, а не с символов/строкфункция символов в C

printf("\nEnter player %d name: ", i); 

scanf ("%s", playername[i]); 

Это позволяет мне читать имя. % D просто номер выше

Я хочу создать функцию, где она генерирует случайное число (я знаю, как сделать это), а затем распечатать приветственное сообщение

Так что-то вроде этого

int grmessage; 
grmessage = rand() %4; 



srand (time(NULL)); 

if (grmessage == 0) 
printf("Welcome to the game, %s!\n" , playername[i]); 
else if (grmessage == 1) 
printf("Hello %s and welcome!\n" , playername[i]); 
else if (grmessage == 2) 
printf("%s has joined us! Say hello!\n" , playername[i]); 
else if (grmessage == 3) 
printf("Pleasure to have you in this game %s!\n" , playername[i]); 
else if (grmessage == 4) 
printf("Why hello there %s!\n" , playername[i]); 
else 
printf("Say hello to %s who has entered the game.\n" , playername[i]); 

Теперь кто-то может сказать мне, как поставить выше блок кода в функции

Так по существу

...

void texter (char a) { my code above } 

, а затем, когда я снова вызову эту функцию, чтобы он распечатать текст

printf("\nEnter player %d name: ", i); 

scanf ("%s", playername[i]); 

texter (playername[i]); 

Я знаю, что я уже дал код буквально, но только нужно, чтобы исправить это и сделать его работу, как это то, что я если бы это было целое число

+0

Я не понял этого требования ... вы можете немного подробнее? –

+0

Покажите свою декларацию для 'playername'. Также рассмотрите возможность использования * линейно ориентированных * функций для ввода пользователем (например, 'fgets' или POSIX' getline'), а не семейства 'scanf'. Существует множество опасностей для новых программистов на C в scanf. Это нормально использовать, если вы полностью понимаете 'man scanf', в противном случае обратите особое внимание на то, что осталось в' stdin'. –

ответ

0

Просто используйте массив символов, чтобы сохранить имя игрока (как вы уже сделали). некоторые вещи, как это:

char playername[no_of_players][100]; 

scanf ("%99s", playername[player_number]); 
//NOTE: %99s to avoid overwriting the terminating '\0' character 

и вы можете отправить строку в качестве параметра функции с помощью char* типа данных

texter() прототип функции:

void texter(char* name_sent) 
{ 
    //use name_sent to access the string sent into function 
} 

Вызов функции:

texter (playername[player_number]); 

Кроме того, просто используйте srand() один раз в начале своей функции main(), не используйте его в функции texter. см. это: srand() — why call it only once?

0

вы должны использовать srand() перед использованием rand(), чтобы получить более случайные результаты. И

playername[i] 

- это строка, не являющаяся символом. Таким образом, ваша функция декларация должна быть

void texter (char* a) { } 
0

Пусть player name[i] является символом, при использовании scanf, спецификатор формата должен быть %c, не %s.

Предположим player name[i] является строкой (это может быть то, что вы собираетесь делать), то при написании void texter() функции, параметр должен быть char *playername или char player name[] не char.

Смежные вопросы