不使用struct在C中显示所有数据

问题描述

因此,我有一个用C语言编写的简单程序,可以帮助我理解结构。没有什么太复杂了。但是,当到达应显示数据的位置时,它仅显示部分数据。该程序要求用户输入名字和姓氏,然后输入金额。然后,它应该显示名字和姓氏以及金额。它不显示姓氏。我确信这可能很简单,但是我不确定这里缺少什么。

代码如下:

    #include <stdio.h>
    #include <stdlib.h>

    #define NAMESIZE 30 

    struct data{
         float amount;
         char firstName[NAMESIZE];
         char lastName [NAMESIZE];
    }record;

    int main()
    {
         printf("\nEnter the donor's first and last names \n");
         printf("Separate names by a space: ");
         scanf("%s,%s",record.firstName,record.lastName);
 
         char c;
         while ( (c = getchar()) != '\n' && c != EOF )
              {
         }
 
         // At this point the program does not work correctly
         // It will just print the first name not the last name
         printf("\nEnter the donation amount: ");
         scanf("%f",&record.amount);

         // Display the information
         printf("\nDonor %s %s gave $%.2f \n",record.lastName,record.amount);

    return 0;
     }

任何对此的建议将不胜感激。谢谢

一旦我在第一个scanf调用中删除了多余的逗号,它就会起作用。这是已更正的行:

             scanf("%s %s",record.lastName);

我在两个%s之间有一个逗号,这是不正确的。

解决方法

或者可以使用受缓冲区溢出保护的fget并使用strtok来分隔间距

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

    #define NAMESIZE 30 

    struct data{
         float amount;
         char firstName[NAMESIZE];
         char lastName [NAMESIZE];
    }record;

    int main()
    {
        char *name = malloc(NAMESIZE);
        if (name == NULL) {
        printf("No memory\n");
        return 1;
        }

         printf("\nEnter the donor's first and last names \n");
         printf("Separate names by a space: ");
         //scanf("%s,%s",record.firstName,record.lastName);
         fgets(name,NAMESIZE,stdin);

        if ((strlen(name) > 0) && (name[strlen (name) - 1] == '\n'))
            name[strlen (name) - 1] = '\0';

        //split name
    int init_size = strlen(name);
    char delim[] = " ";

    char *ptr = strtok(name,delim);
    int idx = 0;
    while(ptr != NULL)
    {
        printf("%d '%s'\n",idx,ptr);
                if(idx == 0){
          strcpy(record.firstName,ptr);
                }
                else{
                  strcpy(record.lastName,ptr);
        }
        ptr = strtok(NULL,delim);
        idx += 1;
    }

     /*
         char c;
         while ( (c = getchar()) != '\n' && c != EOF )
              {
         }
         */
         // At this point the program does not work correctly
         // It will just print the first name not the last name
         printf("\nEnter the donation amount: ");
         scanf("%f",&record.amount);

         // Display the information
         printf("\nDonor %s %s gave $%.2f \n",record.lastName,record.amount);

    free(name);
    return 0;
     }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...