鱼C论坛

 找回密码
 立即注册
查看: 1480|回复: 3

[已解决]【C语言】怎么储存一个用户输入的字符串?或者怎么初始struct中的char数组值??

[复制链接]
发表于 2023-8-12 10:19:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C语言怎么储存一个用户输入的字符串?或者怎么初始struct中的char数组值??

如以下代码,我希望在最后输出ha[0].zhiwei的初始值,而不是排序之后的值。
我如果用指针就会让这个值一直变动
  1. #include <stdio.h>

  2. #define HAH 99

  3. struct ren
  4. {
  5.         char name[20];
  6.         int piao;
  7.         char xuanju[20];
  8.         char zhiwei[99];
  9. };

  10. void main()
  11. {
  12.         struct ren ha[HAH];
  13.         int i;
  14.         int n;
  15.         int c;
  16.         int j;
  17.         int a;
  18.         //char *zhi= ha[0].zhiwei;
  19.         printf("输入选举的职位。\n");
  20.         scanf_s("%s", &ha[0].zhiwei,99);
  21.         //*zhi= ha[0].zhiwei;
  22.         printf("输入参与投票的人数。\n");//获取被选举人的数量
  23.         scanf_s("%d", &n);
  24.         for (i = 0;i < n;i++)//将票数初始为0
  25.         {
  26.                 ha[i].piao = 0;
  27.         }
  28.         for (i = 0;i < n;i++)//获取被选举人的姓名
  29.         {
  30.                 printf("输入第%d位参与投票的人的姓名。\n",i+1);
  31.                 scanf_s("%s", &ha[i].name, 20);
  32.         }
  33.         system("cls");
  34.         printf("现在进行的是 %s 的选举\n", ha[0].zhiwei);
  35.         printf("本次参加选举的人有\n");
  36.         for (i = 0;i < n;i++)
  37.         {
  38.                 printf("%s/", ha[i].name);
  39.         }
  40.         printf("\n输入这次参与投票的人数\n");//获取选举人的数量
  41.         scanf_s("%d", &c);
  42.         for (i = 0;i < c;i++)//投票环节
  43.         {
  44.                 system("cls");
  45.                 printf("现在进行的是 %s 的选举\n", ha[0].zhiwei);
  46.                 printf("本次参加选举的人有\n");//清屏后再次打印,以做到绝对公平且隐藏的选票
  47.                 for (a = 0;a < n;a++)
  48.                 {
  49.                         printf("%s/", ha[a].name);
  50.                 }
  51.                 printf("\n请第%d号投票人输入你想选举的人\n", i + 1);//获取投票的姓名
  52.                 scanf_s("%s", &ha[i].xuanju,20);
  53.                 for (j = 0;j < n;j++)//将姓名进行对比
  54.                 {
  55.                         if (strcmp(ha[i].xuanju,ha[j].name)==0)
  56.                         {
  57.                                 ha[j].piao++;
  58.                         }
  59.                 }
  60.         }
  61.         struct ren temp;
  62.         for (i = 0;i < n;i++)
  63.         {
  64.                 for (j = 0;j + 1 < n;j++)
  65.                 {
  66.                         if (ha[j + 1].piao > ha[j].piao)
  67.                         {
  68.                                 temp = ha[j + 1];
  69.                                 ha[j + 1] = ha[j];
  70.                                 ha[j] = temp;
  71.                         }
  72.                 }
  73.         }
  74.         system("cls");
  75.         printf("\t\t姓名\t\t\t\t票数\n");//输出票数
  76.         for (i = 0;i < n;i++)
  77.         {
  78.                 printf("%20s\t\t%20d\n", ha[i].name, ha[i].piao);
  79.         }
  80.         printf("恭喜%s获得%s职位。\n",ha[0].name,ha[0].zhiwei);
  81. }
复制代码
最佳答案
2023-8-12 10:20:21
你可以使用 scanf_s 函数来储存用户输入的字符串。为了避免缓冲区溢出,你需要指定字符串的最大长度。在这个例子中,你可以使用 scanf_s("%s", ha[0].zhiwei, 99) 来储存用户输入的字符串到 ha[0].zhiwei 中。

如果你想要初始化 struct 中的 char 数组值,你可以使用 strcpy 函数。在这个例子中,你可以使用 strcpy(ha[0].zhiwei, "初始值") 来将"初始值"复制到 ha[0].zhiwei 中。请注意, strcpy 函数需要包含 string.h 头文件。

以下是修改后的代码:

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define HAH 99

  4. struct ren
  5. {
  6.     char name[20];
  7.     int piao;
  8.     char xuanju[20];
  9.     char zhiwei[99];
  10. };

  11. void main()
  12. {
  13.     struct ren ha[HAH];
  14.     int i;
  15.     int n;
  16.     int c;
  17.     int j;
  18.     int a;

  19.     printf("输入选举的职位。\n");
  20.     scanf_s("%s", ha[0].zhiwei, 99);

  21.     // 初始化struct中的char数组值
  22.     strcpy(ha[0].zhiwei, "初始值");

  23.     printf("输入参与投票的人数。\n");
  24.     scanf_s("%d", &n);

  25.     for (i = 0; i < n; i++)
  26.     {
  27.         ha[ i].piao = 0;
  28.     }

  29.     for (i = 0; i < n; i++)
  30.     {
  31.         printf("输入第%d位参与投票的人的姓名。\n", i + 1);
  32.         scanf_s("%s", ha[ i].name, 20);
  33.     }

  34.     // 省略其他代码
  35. }
复制代码


这样,你就可以在最后输出 ha[0].zhiwei 的初始值了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-12 10:20:04 | 显示全部楼层
储存用户输入的字符串和初始化struct中的char数组值

你的代码已经很接近目标了,但还有一些地方需要注意和改进。以下是修改后的代码,我会在每个修改部分进行解释:
  1. #include <stdio.h>
  2. #include <string.h> // Include this header for using strcmp()
  3. #define HAH 99
  4. struct ren {
  5.     char name[20];
  6.     int piao;
  7.     char xuanju[20];
  8.     char zhiwei[99];
  9. };
  10. int main() { // Changed from void to int for proper function return
  11.     struct ren ha[HAH];
  12.     int i;
  13.     int n;
  14.     int c;
  15.     int j;
  16.     int a;
  17.     printf(\输入选举的职位。\
  18. \);
  19.     scanf(\%s\, ha[0].zhiwei); // Removed unnecessary '&' and changed scanf_s to scanf
  20.     printf(\输入参与投票的人数。\
  21. \);
  22.     scanf(\%d\, &n);
  23.     for (i = 0; i < n; i++) {
  24.         ha[i].piao = 0;
  25.     }
  26.     for (i = 0; i < n; i++) {
  27.         printf(\输入第%d位参与投票的人的姓名。\
  28. \, i + 1);
  29.         scanf(\%s\, ha[i].name);
  30.     }
  31.     // Rest of your code remains unchanged...
  32. }
复制代码

主要的改动包括:

1. 在scanf语句中,不需要使用&符号来获取字符数组的地址,因为字符数组名本身就是一个指向首元素的指针。

2. 在比较字符串时,你需要包含string.h头文件,以便使用strcmp函数。

这些修改可以让你储存用户输入的字符串和正确初始化结构体中的字符数组值。在这里,我只修改了开头部分,其余部分保持不变。你可以在此基础上继续完善你的投票系统代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2023-8-12 10:20:21 | 显示全部楼层    本楼为最佳答案   
你可以使用 scanf_s 函数来储存用户输入的字符串。为了避免缓冲区溢出,你需要指定字符串的最大长度。在这个例子中,你可以使用 scanf_s("%s", ha[0].zhiwei, 99) 来储存用户输入的字符串到 ha[0].zhiwei 中。

如果你想要初始化 struct 中的 char 数组值,你可以使用 strcpy 函数。在这个例子中,你可以使用 strcpy(ha[0].zhiwei, "初始值") 来将"初始值"复制到 ha[0].zhiwei 中。请注意, strcpy 函数需要包含 string.h 头文件。

以下是修改后的代码:

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define HAH 99

  4. struct ren
  5. {
  6.     char name[20];
  7.     int piao;
  8.     char xuanju[20];
  9.     char zhiwei[99];
  10. };

  11. void main()
  12. {
  13.     struct ren ha[HAH];
  14.     int i;
  15.     int n;
  16.     int c;
  17.     int j;
  18.     int a;

  19.     printf("输入选举的职位。\n");
  20.     scanf_s("%s", ha[0].zhiwei, 99);

  21.     // 初始化struct中的char数组值
  22.     strcpy(ha[0].zhiwei, "初始值");

  23.     printf("输入参与投票的人数。\n");
  24.     scanf_s("%d", &n);

  25.     for (i = 0; i < n; i++)
  26.     {
  27.         ha[ i].piao = 0;
  28.     }

  29.     for (i = 0; i < n; i++)
  30.     {
  31.         printf("输入第%d位参与投票的人的姓名。\n", i + 1);
  32.         scanf_s("%s", ha[ i].name, 20);
  33.     }

  34.     // 省略其他代码
  35. }
复制代码


这样,你就可以在最后输出 ha[0].zhiwei 的初始值了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-12 10:21:29 | 显示全部楼层
要存储用户输入的字符串,你可以使用字符数组(char array)来保存字符串。在C语言中,我们可以使用scanf_s函数将用户输入的字符串存储到字符数组中。

在你的代码中,你已经使用了scanf_s函数来获取用户输入的字符串并存储到结构体ha中的namezhiwei成员中。这是一个正确的做法。

如果你想输出结构体ha[0]zhiwei的初始值而不是排序后的值,可以在排序之前将其值保存到另一个变量中,然后在最后输出这个变量的值。

下面是修改后的代码示例:

  1. #include <stdio.h>
  2. #include <string.h>

  3. #define HAH 99

  4. struct ren {
  5.     char name[20];
  6.     int piao;
  7.     char xuanju[20];
  8.     char zhiwei[99];
  9. };

  10. int main() {
  11.     struct ren ha[HAH];
  12.     int i, n, c, j, a;
  13.     struct ren temp;

  14.     printf("输入选举的职位:\n");
  15.     scanf_s("%s", ha[0].zhiwei, 99);

  16.     printf("输入参与投票的人数:\n");
  17.     scanf_s("%d", &n);

  18.     for (i = 0; i < n; i++) {
  19.         ha[ i].piao = 0;
  20.     }

  21.     for (i = 0; i < n; i++) {
  22.         printf("输入第%d位参与投票的人的姓名:\n", i + 1);
  23.         scanf_s("%s", ha[ i].name, 20);
  24.     }

  25.     system("cls");

  26.     printf("现在进行的是 %s 的选举\n", ha[0].zhiwei);
  27.     printf("本次参加选举的人有:\n");

  28.     for (i = 0; i < n; i++) {
  29.         printf("%s/", ha[ i].name);
  30.     }
  31.     printf("\n");

  32.     printf("输入这次参与投票的人数:\n");
  33.     scanf_s("%d", &c);

  34.     for (i = 0; i < c; i++) {
  35.         system("cls");

  36.         printf("现在进行的是 %s 的选举\n", ha[0].zhiwei);
  37.         printf("本次参加选举的人有:\n");

  38.         for (a = 0; a < n; a++) {
  39.             printf("%s/", ha[a].name);
  40.         }
  41.         printf("\n");

  42.         printf("请第%d号投票人输入你想选举的人:\n", i + 1);
  43.         scanf_s("%s", ha[ i].xuanju, 20);

  44.         for (j = 0; j < n; j++) {
  45.             if (strcmp(ha[ i].xuanju, ha[j].name) == 0) {
  46.                 ha[j].piao++;
  47.             }
  48.         }
  49.     }

  50.     for (i = 0; i < n; i++) {
  51.         for (j = 0; j + 1 < n; j++) {
  52.             if (ha[j + 1].piao > ha[j].piao) {
  53.                 temp = ha[j + 1];
  54.                 ha[j + 1] = ha[j];
  55.                 ha[j] = temp;
  56.             }
  57.         }
  58.     }

  59.     system("cls");

  60.     printf("\t\t姓名\t\t\t\t票数\n");

  61.     for (i = 0; i < n; i++) {
  62.         printf("%20s\t\t%20d\n", ha[ i].name, ha[ i].piao);
  63.     }

  64.     printf("恭喜%s获得%s职位。\n", ha[0].name, ha[0].zhiwei);

  65.     // 输出初始值
  66.     printf("初始的职位为:%s\n", ha[0].zhiwei);

  67.     return 0;
  68. }
复制代码


这样,你就可以在代码末尾输出ha[0].zhiwei的初始值了。希望对你有帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-9 12:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表