使用printf打印字符时键入错误

时间:2014-11-29 21:08:50

标签: c char printf

我正在尝试将学生的姓名保存在字符数组中并打印第一个学生的姓名,但我的代码不起作用。我正在练习C,所以我自己编写随机程序并需要帮助。我的代码生成以下错误:

format '%s' expects argument of type 'char *', but argument 2 has type 'int'

我对C.很新。任何人都可以帮忙吗?

代码:

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

main(){



char StudentsName[100];
float StudentsGrades[100];
int NumStudents, i, j;

printf("How many students you want to process? ");
scanf("%d", &NumStudents);
if(NumStudents > 15){goto skip_lines_grades;}

for(i=0; i<NumStudents; i++){

    printf("\n Write the name of the student: ");
    scanf("%s", &StudentsName[i]);

}

//Prints First Student, I'M GETTING THE ERROR HERE, WHY?
printf("%s", StudentsName[0]);

goto skip_last_msg;

skip_lines_grades:;
printf("We can process 15 students for now, try again.");

skip_last_msg:;

}

1 个答案:

答案 0 :(得分:0)

我希望你从上面的讨论中得到基本的想法。总而言之,您需要定义一个包含100个字符变量的数组。

此外,对于您的错误,对于char StudentsName[100];StudentsName[0]表示char所期望的第一个%s变量值,而不是地址。所以,你的编译器是对的。如果您需要打印char,则需要使用%c说明符。但是,考虑到您的程序逻辑,这也是错误的。

要纠正,您可以

  1. 分配一个char [100]类型的数组,以容纳多个学生的数据。

  2. 动态分配内存。

  3. 循环以获取每个学生的输入。

  4. 打印输出。

  5. 释放分配的内存。

  6. 检查修改后的代码,其解释清楚。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define NAMESIZ 128
    
    int main(){
    
    
    
    char *StudentsName[100];   //notice here
    float StudentsGrades[100];
    int NumStudents, i, j;
    
    printf("How many students you want to process? ");
    scanf("%d", &NumStudents);
    if(NumStudents > 15){goto skip_lines_grades;}
    
    for(i=0; i<NumStudents; i++){
    
     StudentsName[i] = malloc(NAMESIZ);                   //notice here
     printf("\n Write the name of the student: ");
     scanf("%s", StudentsName[i]);                        //notice here
    
    }
    
    //for(i=0; i<NumStudents; i++)   //uncomment to print all student data
    i = 0;                           //comment out to print all student data
    printf("Student [%d] is %s\n", (i+1), StudentsName[i]);
    
    for(i=0; i<NumStudents; i++)
    free (StudentsName[i]);                              //notice here
    
    goto skip_last_msg;
    
    skip_lines_grades:;
    printf("We can process 15 students for now, try again.");
    
    skip_last_msg:;
    
    
    }