Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Ошибка функции "ожидаемое выражение перед char"?

Автор вопроса: adohertydОтветов: 2

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

#include <stdio.h>
#include <string.h>

void get_user_input(char *guess[10]);

void get_user_input(char *guess[10])
{
     printf("Please guess the word: \n");
     scanf("%s", guess);
}

int main(void)
{
     const char secret[10] = "pink";
     char guess[10];
     int i;

     for (i=0; i < 3; i++)
     {
         get_user_input(char *guess[10]);

         if (strcmp(secret, guess)==0)
         {
             printf("Your guess was correct");
             return 0;
         }
         else
         {
             printf("Your guess was incorrect. Please try again\n");
         }
     }
     return 0;
}

ccompiler-errorsfunction

Ответы

Ответ 1 · рейтинг 4 · Mysticial

У вас есть лишний char здесь:

for (i=0; i < 3; i++)
{
    get_user_input(char *guess[10]);

Просто избавься от этого. Вам просто нужно передать переменную.

get_user_input(guess);

ИЗМЕНИТЬ:

Другая проблема, похоже, заключается в этой функции:

void get_user_input(char *guess[10]);

изменить его на это:

void get_user_input(char *guess)
{
 printf("Please guess the word: \n");
 scanf("%s", guess);
}

и это должно работать. Однако имейте в виду, что вы рискуете переполнить свой массив guess.

Ответ 2 · рейтинг 1 · Peter G.

Внутри цикла напишите

get_user_input(guess);

вместо

get_user_input(char *guess[10]);

.

Кроме того, вы должны удалить бесполезный прототип

void get_user_input(char *guess[10]);

и измените подпись следующей функции на

void get_user_input(char * guess)

разрешить передачу указателя на первый символ массива вместо указателя на указатель на первый символ, который не будет компилироваться. Побочная проблема заключается в том, что char *guess[10] означает массив из 10 указателей на char.

PS: Это помогает опубликовать номер оскорбительной строки в дополнение к сообщению об ошибке.

PPS: У вас ошибка переполнения буфера памяти, если при использовании вводятся длинные ответы. Вы можете использовать fgets, чтобы избежать этого.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы