Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何停止打印有条件的字符串?_C_String_Char - Fatal编程技术网

C 如何停止打印有条件的字符串?

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[

我制作了一个名为“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[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
是未定义的我说的