我做了一个叫做“人”的结构。我想输入一个人的名字和姓氏(按顺序,用空格隔开)。在我的代码中,由于某种原因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);