将一个变量值分配给另一个变量值

时间:2011-07-07 15:24:02

标签: c

我知道这对大多数人来说可能会非常简单,但我是新手,所以请不要介意我。我正在尝试通过在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的值并将其分配给日期值。问题是它不起作用,我不知道为什么。

5 个答案:

答案 0 :(得分:2)

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

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

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

等等。

答案 1 :(得分: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");

答案 2 :(得分:1)

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

C没有提供直接的方法。最接近的方法是POSIX strptime(),我认为它没有完整处理它。

答案 3 :(得分:0)

%d类型scanf()时使用int

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

答案 4 :(得分:0)

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

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

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