C 将%s与数组一起使用

C 将%s与数组一起使用,c,C,printf调用的问题是%s需要一个char*,而您给出了一个char 名为nama的变量是char的数组,因此nama[i]的类型是char,而不是char*。编译器必须自动将其转换为int。我想你应该使用: D:\Works\ABKC1406\Hasil_Tes_Formatif\main.c|36|warning: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Wformat]|

printf调用的问题是
%s
需要一个
char*
,而您给出了一个
char

名为
nama
的变量是
char
的数组,因此
nama[i]
的类型是
char
,而不是
char*
。编译器必须自动将其转换为
int
。我想你应该使用:

D:\Works\ABKC1406\Hasil_Tes_Formatif\main.c|36|warning: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Wformat]|
您的scanf呼叫也存在同样的问题:

printf("%d\t  %s\t\t   %d\n", NIS[i], nama, nilai[i]);
在C语言中,“字符串”只是一个字符数组。终止(详情见下文“注释”)

您的代码正好定义了一个这样的数组:

scanf("%s", nama);
因此,代码定义了一个“字符串”

显然,您需要一个字符串数组,因此需要做两件事:

  • 定义任意字符串的最大长度
  • 所需的字符串数
后者是
大小
,前者我们可以定义为

char nama[ SIZE ];
包含用户输入的所有名称的“字符串”数组的定义如下所示:

#define NAMALEN_MAX (100)
char nama[SIZE][NAMALEN_MAX];
扫描新名称的语句如下所示:

#define NAMALEN_MAX (100)
char nama[SIZE][NAMALEN_MAX];
这些是更正代码的基本更改


代码仍然没有保存

但也应用以下两个更改:

  • 要在目标阵列无法容纳的范围内进行扫描,请更改此选项

    scanf("%s", nama[i]);
    
    将来

    scanf("%s", nama[i]);
    
    此更改告诉程序不要从用户处扫描超过99个字符

    为什么是
    99
    而不是
    100

    注意C-“字符串”需要一个额外的
    字符
    ,通过放置
    '\0'
    值(aka
    NUL
    )来标记字符串的结尾,这就是所谓的
    0
    -终止符或空终止符(不要与
    null
    ,它是空指针常量,与“字符串”无关。)

  • 您的
    for
    -循环
    n次。数组中的值不超过
    SIZE

    代码需要确保循环不会超过
    SIZE
    次数

    为了确保这一点,在
    n
    上添加一些所谓的“输入验证”,例如:

    scanf("%99s", nama[i]);
    
    我们可以做到:

    这将隐藏一个事实,即
    nama
    仍然是
    char
    的二维数组


    但是,不要这样做,因为这会不必要地混淆代码。

    第36行之后的rest程序正在执行try this
    printf(“d\t%s\t\t%d\n”,NIS[i],nama,nilai[i])但我想通过使用%c使用字符串,而不是单个字符。我如何解决这个问题@BatCoderIf如果你想要一个字符串数组,你实际上需要一个2D字符数组。您拥有的(
    char-nama[SIZE];
    )是一个1D字符数组。现在,如果我输入2个nama[I]数据作为Sai和Opi,我会得到nama数据的每个输出的输出SOpi。我编辑了我的答案,您的scanf调用也应该被修改。这有帮助吗?让我试试,等一下@OlivierD:\Works\ABKC1406\Hasil_Tes_Formatif\main.c | 26 |警告:格式“%s”要求参数类型为“char”,但参数2的类型为“char()[30]”[-Wformat];是的,我的错,您不需要
    &nama
    ,只有
    nama
    在scanf的参数中。我编辑了我的答案。你不应该再这样了,这解决了我的问题。我还需要对C编程进行大量的研究。实际上多维数组在我的课上还没有讲过,我的程序应该按大小限制输入,因为有些课最多有30个学生。所以我让n@SaifulRamadan:请看我在“string”s数组上的脚注。感谢您的帮助。注意:字符串是以0值字符代码结尾的字符值序列。字符串存储为数组,但不是每个数组都包含字符串。@JohnBode:我在后面的回答中详细提到了这一点。但你是对的,因为它是不完整的。
    char nama[SIZE][NAMALEN_MAX];
    
    typedef char[NAMALEN_MAX] Nama_Element;
    
    Nama_Element nama[SIZE];