C 如何停止打印有条件的字符串?
我制作了一个名为“person”的结构。我想输入一个人的名字和姓氏(按顺序,用空格分隔)。在我的代码中,出于某种原因printf();不能正常工作C 如何停止打印有条件的字符串?,c,string,char,C,String,Char,我制作了一个名为“person”的结构。我想输入一个人的名字和姓氏(按顺序,用空格分隔)。在我的代码中,出于某种原因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[
#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;
}
#包括
#包括
#包括
#定义n3
结构人{
char name_姓氏[50];
};
内部主(空){
结构人M[N];
int i,j;
对于(i=0;i,从您共享的代码来看,您似乎试图只打印名字。以下代码应该可以实现这一点:
#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;
}
从您共享的代码来看,似乎您正在尝试只打印名字。以下代码应该可以实现这一点:
#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;
}
对于初学者来说,gets
函数不是标准的C函数。请改用fgets
这个电话
fflush(stdin);
具有未定义的行为
这个环路
for(j=0;j<strlen(M[i].name_surname);j++){
if(M[j].name_surname!=' '){
printf("%c", M[i].name_surname);
}
else{
break;
}
}
至少你应该写信
if(M[i].name_surname[j] !=' ' ){
但在任何情况下,只要正确写入下一个printf语句,就只输出一个字符
printf("%c\n", M[i].name_surname[j]);
也许你的意思是
#include <stdio.h>
#include <string.h>
#define N 3
struct person
{
char name_surname[59];
};
int main(void)
{
struct person M[N];
for ( int i = 0; i < N; i++ )
{
printf( "Enter name and surname: " );
fgets( M[i].name_surname, sizeof( M[i].name_surname ), stdin );
M[i].name_surname[ strcspn( M[i].name_surname, "\n" ) ] = '\0';
}
for ( int i = 0; i < N; i++ )
{
const char *p = strchr( M[i].name_surname, ' ' );
if ( p != NULL )
{
printf( "%*.*s ",
( int )( p - M[i].name_surname ),
( int )( p - M[i].name_surname ),
M[i].name_surname );
size_t n = strspn( p, " " );
printf( "%s\n", p + n );
}
else
{
printf( "%s\n", M[i].name_surname );
}
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define N 3
struct person
{
char name_surname[59];
};
int main(void)
{
struct person M[N];
for ( int i = 0; i < N; i++ )
{
printf( "Enter name and surname: " );
fgets( M[i].name_surname, sizeof( M[i].name_surname ), stdin );
M[i].name_surname[ strcspn( M[i].name_surname, "\n" ) ] = '\0';
}
for ( int i = 0; i < N; i++ )
{
size_t n = strspn( M[i].name_surname, " " );
printf( "%c.\n", *( M[i].name_surname + n ) );
}
return 0;
}
或以下
#include <stdio.h>
#include <string.h>
#define N 3
struct person
{
char name_surname[59];
};
int main(void)
{
struct person M[N];
for ( int i = 0; i < N; i++ )
{
printf( "Enter name and surname: " );
fgets( M[i].name_surname, sizeof( M[i].name_surname ), stdin );
M[i].name_surname[ strcspn( M[i].name_surname, "\n" ) ] = '\0';
}
for ( int i = 0; i < N; i++ )
{
const char *p = strchr( M[i].name_surname, ' ' );
if ( p != NULL )
{
printf( "%*.*s ",
( int )( p - M[i].name_surname ),
( int )( p - M[i].name_surname ),
M[i].name_surname );
size_t n = strspn( p, " " );
printf( "%s\n", p + n );
}
else
{
printf( "%s\n", M[i].name_surname );
}
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define N 3
struct person
{
char name_surname[59];
};
int main(void)
{
struct person M[N];
for ( int i = 0; i < N; i++ )
{
printf( "Enter name and surname: " );
fgets( M[i].name_surname, sizeof( M[i].name_surname ), stdin );
M[i].name_surname[ strcspn( M[i].name_surname, "\n" ) ] = '\0';
}
for ( int i = 0; i < N; i++ )
{
size_t n = strspn( M[i].name_surname, " " );
printf( "%c.\n", *( M[i].name_surname + n ) );
}
return 0;
}
对于初学者来说,gets
函数不是标准的C函数。请改用fgets
这个电话
fflush(stdin);
具有未定义的行为
这个环路
for(j=0;j<strlen(M[i].name_surname);j++){
if(M[j].name_surname!=' '){
printf("%c", M[i].name_surname);
}
else{
break;
}
}
至少你应该写信
if(M[i].name_surname[j] !=' ' ){
但在任何情况下,只要正确写入下一个printf语句,就只输出一个字符
printf("%c\n", M[i].name_surname[j]);
也许你的意思是
#include <stdio.h>
#include <string.h>
#define N 3
struct person
{
char name_surname[59];
};
int main(void)
{
struct person M[N];
for ( int i = 0; i < N; i++ )
{
printf( "Enter name and surname: " );
fgets( M[i].name_surname, sizeof( M[i].name_surname ), stdin );
M[i].name_surname[ strcspn( M[i].name_surname, "\n" ) ] = '\0';
}
for ( int i = 0; i < N; i++ )
{
const char *p = strchr( M[i].name_surname, ' ' );
if ( p != NULL )
{
printf( "%*.*s ",
( int )( p - M[i].name_surname ),
( int )( p - M[i].name_surname ),
M[i].name_surname );
size_t n = strspn( p, " " );
printf( "%s\n", p + n );
}
else
{
printf( "%s\n", M[i].name_surname );
}
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define N 3
struct person
{
char name_surname[59];
};
int main(void)
{
struct person M[N];
for ( int i = 0; i < N; i++ )
{
printf( "Enter name and surname: " );
fgets( M[i].name_surname, sizeof( M[i].name_surname ), stdin );
M[i].name_surname[ strcspn( M[i].name_surname, "\n" ) ] = '\0';
}
for ( int i = 0; i < N; i++ )
{
size_t n = strspn( M[i].name_surname, " " );
printf( "%c.\n", *( M[i].name_surname + n ) );
}
return 0;
}
或以下
#include <stdio.h>
#include <string.h>
#define N 3
struct person
{
char name_surname[59];
};
int main(void)
{
struct person M[N];
for ( int i = 0; i < N; i++ )
{
printf( "Enter name and surname: " );
fgets( M[i].name_surname, sizeof( M[i].name_surname ), stdin );
M[i].name_surname[ strcspn( M[i].name_surname, "\n" ) ] = '\0';
}
for ( int i = 0; i < N; i++ )
{
const char *p = strchr( M[i].name_surname, ' ' );
if ( p != NULL )
{
printf( "%*.*s ",
( int )( p - M[i].name_surname ),
( int )( p - M[i].name_surname ),
M[i].name_surname );
size_t n = strspn( p, " " );
printf( "%s\n", p + n );
}
else
{
printf( "%s\n", M[i].name_surname );
}
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define N 3
struct person
{
char name_surname[59];
};
int main(void)
{
struct person M[N];
for ( int i = 0; i < N; i++ )
{
printf( "Enter name and surname: " );
fgets( M[i].name_surname, sizeof( M[i].name_surname ), stdin );
M[i].name_surname[ strcspn( M[i].name_surname, "\n" ) ] = '\0';
}
for ( int i = 0; i < N; i++ )
{
size_t n = strspn( M[i].name_surname, " " );
printf( "%c.\n", *( M[i].name_surname + n ) );
}
return 0;
}
看起来这只是if语句和下一行中数组的查找方式不太正确-如果要从当前字符串中选择特定字符,则应为M[i]。name\u姓氏[j]
看看这是否更有效:
for(i=0;i<N;i++){
for(j=0;j<strlen(M[i].name_surname);j++){
if(M[i].name_surname[j]!=' '){
printf("%c", M[i].name_surname[j]);
}
else{
break;
}
}
}
for(i=0;i看起来这只是if语句中数组中的显示方式,下一行不太正确-如果要从当前字符串中选择特定字符,它应该是M[i]。name_姓氏[j]
看看这是否更有效:
for(i=0;i<N;i++){
for(j=0;j<strlen(M[i].name_surname);j++){
if(M[i].name_surname[j]!=' '){
printf("%c", M[i].name_surname[j]);
}
else{
break;
}
}
}
for(i=0;请阅读。你说它不起作用。以什么方式?你想要什么,你得到了什么?@Blaze我想你的意思是printf(“%c”,M[i]。name_姓氏[j])
和@klutt,你没有声明j
@RoQuOTriX是对的,谢谢你的更正。@RoQuOTriX说什么?j
是未定义的,我说请读。你说它不起作用。以什么方式?你想要什么,你得到什么?@Blaze我想你是指printf(“%c”,M[I]。name.[j])
和@klutt,你没有声明j
@RoQuOTriX是的,谢谢你的更正。@RoQuOTriX说什么?j
是未定义的我说的