gpt4 book ai didi

c - C 中无法接受字符串中的空格

转载 作者:行者123 更新时间:2023-11-30 21:06:54 30 4
gpt4 key购买 nike

如果我能得到这方面的帮助,我会很高兴。我无法接受字符串中的空格。我正在使用 C 进行套接字编程。我尝试了以下操作。请帮助我。

  1. char name[100];
    fgets (name, 100, stdin);

我尝试使用fflush(stdin);在 fgets 之前。

  • fgets (name, 100, stdin);

  • scanf("%[^\n]s",name);(引用1,2&3:Reading string from input with space character?)

  • scanf("%[^\t]s",name);为我工作,但我必须在输入后按 Tab+Enter 。因此,我在名称后输入的所有内容都会打印在服务器的下一行上。我想创建类似表格的结构。如何接受带有空格的字符串输入?提前谢谢您

  • 客户端.c

    #include <stdio.h>
    #include <ctype.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    #include <stdlib.h>
    #include <string.h>
    #define SERVER_PORT 5432
    #define MAX_LINE 256

    struct course{
    char name[100];
    char id[20];
    int registered;
    int empty;
    char time[20];
    };

    int main(int argc, char * argv[])
    {
    struct course c;
    FILE *fp;
    struct hostent *hp;
    struct sockaddr_in sin;
    char *host;
    char buf[MAX_LINE];
    int s, new_s,n;
    int len;
    int rec=1;
    char data[1000];
    int choice;
    char search[20], del[50];
    char add[1000]="\n";
    char avail[10],ocu[10],sem[10],id[10];


    if (argc==2) {
    host = argv[1];
    }
    else {
    fprintf(stderr, "usage: simplex-talk host\n");
    exit(1);
    }

    hp = gethostbyname(host);
    if (!hp) {
    fprintf(stderr, "simplex-talk: unknown host: %s\n", host);
    exit(1);
    }

    bzero((char *)&sin, sizeof(sin));
    sin.sin_family = AF_INET;
    bcopy(hp->h_addr, (char *)&sin.sin_addr, hp->h_length);
    sin.sin_port = htons(SERVER_PORT);

    if ((s = socket(PF_INET, SOCK_STREAM, 0)) < 0) {
    perror("simplex-talk: socket");
    exit(1);
    }
    if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) {
    perror("simplex-talk: connect");
    close(s);
    exit(1);
    }


    do{
    printf("\n\n*************************************************\n");
    printf(" 1.List All \n 2.Search \n 3.Add \n 4.Delete \n 9.Quit \n");
    printf("\nPlease enter your choice: \n");
    scanf("%d",&choice);


    switch(choice)
    {
    case 1: send(s, &choice,sizeof(int), 0);
    printf("\n==============Requesting All Records..=======================\n");
    len = recv(s, &data,sizeof(data), 0);
    fputs(data,stdout);
    break;

    case 2: send(s, &choice,sizeof(int), 0);
    printf("\nPlease Enter Course Name/ID: ");
    scanf("%s",&search);
    send(s, &search,sizeof(search), 0);
    printf("\n======================Searching for The Record..================\n");
    len = recv(s, &data,sizeof(data), 0);
    fputs(data,stdout);
    break;

    case 3: send(s, &choice,sizeof(int), 0);
    printf("Press Tab And Enter After Entering Course Name...\n");
    printf("Please Enter Course ID: ");
    scanf("%s",&c.id);
    printf("Please Enter Course Name: ");
    scanf("%[^\t]s",&c.name);
    printf("No of Students Registered: ");
    scanf("%d",&c.registered);
    printf("No of Vacancies: ");
    scanf("%d",&c.empty);
    printf("Course Time: ");
    scanf("%s",&c.time);
    send(s, &c,sizeof(struct course), 0);
    printf("\nInserting New Record..\n");
    break;

    case 4: send(s, &choice,sizeof(int), 0);
    printf("Press Tab And Enter After Entering Course Name...\n");
    printf("Please Enter Course Name/ID To Drop: ");
    //scanf("%[^\t]s",&data);
    scanf("%100[^\n]", del);
    //fgets(del,sizeof(del),stdin);
    send(s, del,sizeof(del), 0);
    break;

    default: printf("Please enter valid choice...\n");
    }

    }while(choice!=0);
    }

    最佳答案

    要从字符串中删除空格,请循环遍历该字符串,直到 isspace返回false。您还可以通过使用 strlen 跳转到字符串末尾并使用 isspace 向后工作来修剪尾随空白。在这里显示的示例中,我们修剪所有前导或尾随空白,并打印结果。

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

    int main(){
    printf("Please enter your name: ");
    fflush(stdout);

    char buf[128];
    fgets(buf, 128, stdin);


    int start = 0;
    // remove any leading whitespace.
    while(isspace(buf[start])) start++;

    int end = strlen(buf);
    // find the first character from the end that is not whitespace
    while(end > start && isspace(buf[end - 1])) end--;

    buf[end] = '\0'; // terminate the string to trim the whitespace at the end.

    char * name = &buf[start];
    printf("Name = '%s'\n", name);
    }

    关于c - C 中无法接受字符串中的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46518645/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com