从字符串打印字符值时出错

时间:2019-03-19 04:48:12

标签: c

用户必须输入一些项目,然后矩阵必须在3x4上打印它们 当我使用“%c”而不是“%s”时,它只能显示一个字符,但是当我想用“%s”来打印整个单词时,就不会起作用。

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

char objetos[10][10];

int main(){

    int i,e;

    for (i=1;i<=3;i++){
        for (e=1;e<=4;e++){
            system("cls");  
            printf("Ingrese El Objeto Personal %i-%i: ",i,e);
            scanf("%s",&objetos[i][e]);
        }
    }

    system("cls");
    for (i=1;i<=3;i++){
        for (e=1;e<=4;e++){ 
            printf("%s",objetos[i][e]);
        }
        printf("\n");
    }

    return 0;
}

1 个答案:

答案 0 :(得分:2)

  

但是当我想用“%s”打印整个单词时,是行不通的吗?

格式说明符%s期望参数const char*objetos[i][e]不是char*类型的参数,而是char类型的参数。 改变这个

for (i=1;i<=3;i++){
   for (e=1;e<=4;e++){ 
   printf("%s",objetos[i][e]);
}

for (i=1;i<=3;i++){
    printf("%s",objetos[i]);
}

也在扫描时,这个

scanf("%s",&objetos[i][e]);

不正确,请在此处使用%c而不是%s

例如

for (i=1;i<=3;i++){
     for (e=1;e<=4;e++){
         system("cls");  
         printf("Ingrese El Objeto Personal %i-%i: ",i,e);
         scanf(" %c",&objetos[i][e]);
     }
}

旁注,数组索引从zero(0)中的one(1)开始而不是C。您可能似乎将数据放入objetos[1]中并从objetos[1]中读取,但是如果您的程序曾经尝试从objetos[0]中读取数据,则会造成问题。

最好从0th索引开始旋转循环。对于例如

for (i=0;i<=3;i++){
    for (e=0;e<=4;e++){
      scanf(" %c",&objetos[i][e]); /* give the whitespace before %c to avoid buffer overrun */
     }
}