【问题标题】:Function error 'expected expression before char'?函数错误“字符之前的预期表达式”?
【发布时间】:2011-11-16 10:49:53
【问题描述】:

我创建了以下程序,它允许用户在结束程序之前猜测一个单词 3 次。我正在使用一个函数来读取用户输入。当我编译程序时,我收到错误“char 之前的预期表达式”。一些反馈将非常感谢!

#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;
}

【问题讨论】:

    标签: c function compiler-errors


    【解决方案1】:

    你在这里有一个额外的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 数组。

    【讨论】:

    • 我之前尝试过并得到以下错误:传递参数 1 '从不兼容的指针类型获取用户输入。注意预期的 'char**' 但参数不是 'char*' 类型
    • 感谢您的帮助!我也理解这个错误,所以不会再犯了。非常感谢
    【解决方案2】:

    在循环内部,写

    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 来避免这种情况。

    【讨论】:

    • 和我对神秘彼得的评论一样非常感谢你
    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 2014-02-22
    • 2021-03-27
    • 1970-01-01
    • 2023-04-11
    • 2014-04-20
    • 2015-03-28
    • 2021-02-19
    相关资源
    最近更新 更多