这段代码功能正常吗?

时间:2017-05-04 14:41:23

标签: c cs50

这是我在使用CS50时编写的一段代码。我正在用CS中的CS50 IDE编写这段代码。我想这样做,我可以输入一个名字或一个数字,而不必为每个编写单独的代码,但我不知道该怎么做。任何帮助将非常感激。谢谢。

#include<cs50.h>
#include<stdio.h>

int main(void)
{
    printf("Name: \n");
    string name1 = get_string();
    if (name1 is in, int name1 = get_int())
    ;
    printf("Nice, %s\n", name1);
}

2 个答案:

答案 0 :(得分:2)

C本身不支持类型多态,因此您可以编写处理intchar []的代码,也无法在运行时确定对象的类型。

您可以使用一些技巧来伪造它。您可以使用宏或函数指针来创建与类型无关的接口,将特定于类型的处理推迟到其他函数。 C11引入了_Generic宏,允许您根据参数的类型选择一个动作:

#define DO_SOMETHING_WITH( X ) _Generic( (X),                           \
                                         int : do_something_with_int,   \
                                      char * : do_something_with_string \
                                       )( X )

void do_something_with_int( int arg )
{
  ...
}

void do_something_with_string( const char *arg )
{
  ...
}

int main( void )
{
  int x;
  char y[SOME_LENGTH];

  DO_SOMETHING_WITH( x );
  DO_SOMETHING_WITH( y );
  ...
}

但最后,您仍然必须编写执行特定类型处理的代码。

答案 1 :(得分:0)

此外,如果您尝试printf("Nice, %s\n", name1);name1int,则会收到错误消息。您应该使用printf("Nice, %d\n", name1);来打印整数

相关问题