我做了一个叫做“人”的结构。我想输入一个人的名字和姓氏(按顺序,用空格隔开)。在我的代码中,由于某种原因printf();无法正常工作。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3

struct person{
    char name_surname[50];
};

int main(void){

    struct person M[N];
    int i,j;

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

        printf("Enter name and surname:\n");
        fflush(stdin);
        gets(M[i].name_surname);

    }
    for(i=0;i<N;i++){
        for(j=0;j<strlen(M[i].name_surname);j++){
            if(M[j].name_surname!=' '){
                printf("%c", M[i].name_surname);
            }
            else{
                break;
            }
        }
    }

    return 0;
}

最佳答案

从你共享的代码来看,你似乎只想打印名字。以下代码应完成此任务:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3

struct person{
    char name_surname[50];
};

int main(void){

    struct person M[N];
    int i;

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

        printf("Enter name and surname:\n");
        fflush(stdin);
        gets(M[i].name_surname);

    }
    for(i=0;i<N;i++){
        for(int j=0;j<strlen(M[i].name_surname);j++){
            if(M[i].name_surname[j]!=' '){
                printf("%c", M[i].name_surname[j]);
            }
            else{
                printf("\n");
                break;
            }
        }
    }

    return 0;
}

M[i].name_surname-这里M[i]可以访问分配的内存之外的内存,因为M[]的大小N被声明为3,而j可以增加到名称的长度。
其次,name_surname不是字符-它是指向字符的指针。如果要打印第j个字符,则需要打印M[i].name_surname[j]。或者,可以使用以下命令打印整个字符串:
printf("%s", M[i].name_surname);

07-24 09:46
查看更多