这是我在使用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);
}
答案 0 :(得分:2)
C本身不支持类型多态,因此您可以编写处理int
和char []
的代码,也无法在运行时确定对象的类型。
您可以使用一些技巧来伪造它。您可以使用宏或函数指针来创建与类型无关的接口,将特定于类型的处理推迟到其他函数。 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);
而name1
是int
,则会收到错误消息。您应该使用printf("Nice, %d\n", name1);
来打印整数