创造一个功能; scanf和char问题

时间:2015-08-27 15:18:34

标签: c function scanf cs50

我正处于学习编程的最初阶段。我正在使用一个使用自制功能的程序。我不理解我的错误。我很感激你的帮助。请帮我一个忙,并使用与我所处的原始阶段相称的方法回答。我要留下我已经写好的评论,所以你可以看到我想通过这个或那个代码行实现的目标。

/* Prints a user's name */

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

// prototype
void PrintName(char name); 

/* this is a hint for the C saying that this function will be later specified */

int main(void)
{
    char name[50];

    printf("Your name: ");
    scanf ("%49s", name); /* limit the number of characters to 50 */
    PrintName(name);
}

// Says hello to someone by name

void PrintName(char name)
{
    printf("hello, %s\n", name);
}

我收到以下错误消息:

function0.c: In function ‘main’:
function0.c:14: warning: passing argument 1 of ‘PrintName’ makes integer from pointer without a cast
function0.c: In function ‘PrintName’:
function0.c:21: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
function0.c:21: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’

PrintName函数基于我从课程中获取的前一个程序(并将其采用到C):

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

int main (void)
{
    char name[40];

    printf ("Type a name:  ");
    scanf ("%39s", name);

    printf ("%s", name); 

    printf("\n");
 }

这最后一个程序完美无缺。 我在原始程序中犯了什么错误?如果我理解正确,我的PrintName功能会出现问题。

打印名称的初始程序是使用CS50库的CS50程序的修改版本:

// Prints a user's name

#include <stdio.h>
#include <cs50.h>

// prototype
void PrintName(string name); 

int main(void)
{
    printf("Your name: ");
    string s = GetString(); //GetString is the same as scanf; it takes input from the user
    PrintName(s);            
}

// Says hello to someone by name

void PrintName(string name)
{
    printf("hello, %s\n", name); 
}

鉴于&#34;字符串&#34;是&#34; char&#34;在C中,我在我的程序中用char替换字符串。 谢谢!

4 个答案:

答案 0 :(得分:2)

您的函数/正在等待char作为参数,但您提供了PrintName,这就是您看到这一点的原因:

char[]

要提供warning: passing argument 1 of ‘PrintName’ makes integer from pointer without a cast 作为参数,您需要更改功能,如下所示:

char[]

答案 1 :(得分:2)

您应该使用char *而不是char作为函数的参数。 Char是一个符号,而char *是指向字符串的指针。

答案 2 :(得分:1)

void PrintName (char name);更改为void PrintName (char *name);void PrintName (char name[]);

目前,此函数接收一个名为name的字符。你希望它接收一组字符。

答案 3 :(得分:1)

 void PrintName(char name);

您的功能需要传递character variable,而是传递char array。因此它导致错误。

此外,%s中的printf预计会char *,您会传递char,从而导致另一个问题。

使用参数修正程序声明和定义函数,如下所示 -

void PrintName(char *name);

void PrintName(char name[]);

两者都有效。