【问题标题】:Assigning one variable value to another将一个变量值分配给另一个变量
【发布时间】:2011-07-07 15:24:02
【问题描述】:

我知道这对于这里的大多数人来说可能会非常简单,但我是新手,所以请不要介意我。我正在尝试通过在 c 程序的 printf/scanf 行中使用其名称将变量值分配给另一个。代码如下:

int day, month, counter;
int sunday = 0;
int monday = 1;
int tuesday = 2;
int wednesday = 3;
int thursday = 4;
int friday = 5;
int saturday = 6;

printf("Enter how many days in the month:\n");
scanf("%i", &month);

printf("Enter what day the month starts on:\n");
scanf("%i", &day);

这只是其中的一部分,但我想做的是这样当用户在第二个 printf/scanf 行中输入实际天数时,它将调用 int 的值并将其分配给天数价值。问题是它不起作用,我不知道为什么。

【问题讨论】:

  • 输入“实际日期名称”是什么意思。如果您正在谈论用户输入“星期日,星期一”等,那么您为什么将其存储在int
  • 我想他想在命令行中输入变量名,然后在其他地方使用存储在变量中的 int。听起来他应该使用枚举...

标签: c


【解决方案1】:

您不能在 C 中执行此操作(当 scanf 运行时,从键盘输入变量名称),这不是脚本语言。基本上,所有变量的名称在编译过程中都会丢失(它们仍然可能保存为调试信息,供调试器使用,例如 gdb,但程序通常不会在运行时使用它)。

您应该通过scanf%s 输入一个字符串(类型为char*char [] 的字符数组),然后手动解析它,例如

char string[50];
scanf("%s", string);
if( strcmp(string, "monday") == 0 )
  day = 1;
else if ( strcmp(string, "tuesday") == 0 )
  day = 2;

等等。

【讨论】:

  • 我想这回答了我的问题。就像我说的那样,我是新手,所以谢谢你没有抨击我=)。
  • 有人在某个时候遇到过同样的情况:)
  • 他已经在句子中使用了“bash”……这句话的原力很强。
【解决方案2】:

对于初学者来说,类似的东西。

 int day, month, counter;
 char *dofw[] = { "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", NULL};
 char day_string[20];

 printf("Enter how many days in the month:\n");
 scanf("%d", &month);

 printf("Enter what day the month starts on:\n");
 scanf("%20s", day_string);

 int i;
 day = -1;
 for(i=0; dofw[i]; i++) {
   if(strcmp(day_string, dofw[i]) == 0) {
     day = i;
     break;
   } 
 }
 if(day == -1)
   printf("User Y U not give good day\n");

【讨论】:

    【解决方案3】:

    您将需要编写一个函数或一组函数,向使用它的程序提供单个接口,该函数将扫描程序已读取的字符串(不是整数),并将其转换为适当的值。您可能应该使代码不区分大小写,并且能够接受有效(唯一)缩写(如 Sa、Su、M、Tu、W、Th、F)等。您可能接受也可能不接受星期几数字作为名称的替代品。如果您必须担心国际化或 I18N(S、D、L、J、Ma、Me、V 代表 Samedi、Dimanche、Lundi、Mardi、Mercredi、Jeudi、Vendredi 法语等),这会增加这些功能的复杂性(但不考虑使用它们的代码的复杂性)。

    C 不提供执行此操作的直接方法。最接近的方法是 POSIX strptime(),我认为它不能完全处理这个问题。

    【讨论】:

      【解决方案4】:

      当您对 int 类型使用 scanf() 时,使用 %d

      %d and %i are similar but different for scanf().

      【讨论】:

        【解决方案5】:

        如果您执行scanf 将接受一个有符号整数 (%i),那么您就不能期待一个整数。如果用户输入一个字符串(比如星期天,所以你希望那一天收到 '0' 值),你必须以不同的方式来做。

        也许您可以要求用户在输入数据之前插入格式(printf("Enter the format of day ('n' for name, 'd' for number:\n");然后,根据用户的选择,你可以做一个不同的扫描 f: 如果我选择了 'n' 那么你可以去寻找对应的数值。

        如果我可以建议您改进您的代码,您必须声明不同的日期或使用数组或结构或枚举。

        【讨论】:

        • "'n' for name, 'n' for number" 不可能得到你想要的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多