gpt4 book ai didi

c - 将类型发送到函数并读取特定数据类型

转载 作者:行者123 更新时间:2023-11-30 17:25:54 27 4
gpt4 key购买 nike

第一个问题:我可以将类型发送给函数吗?例如,如果我编写一个适用于任何类型的通用函数。

第二个问题:我想编写一个函数来确保读取以下数据类型之一:int、float、double、long long

如果我读取一个 int,我希望它如何工作:

  1. 如果我输入“abcd”,该函数将打印一条消息,要求输入有效的 int 数字。
  2. 如果我输入“123abc”,该函数将打印一条消息,要求输入有效的整数。

唯一有效的情况是:

  1. 如果我输入“123”或
  2. 如果我在这种情况下输入“123 456”,该函数将仅读取第一个数字,而将第二个数字保留在缓冲区中。

这是我的此函数的代码:

int citesteNumar(char mesaj[])
{
char c;
int nr=0;
int semn = 1;
int cifre = 0;
bool ok = false;
while(1)
{
nr = 0;
while(1)
{
c = getchar();
if(c == ' ' && !ok)
continue;
if((((c < '0') || ('9' < c)) && (c != '-')) || (c == '\n'))
{
if(c != ' ')
fflush(stdin);
if((c != '\n') && (c != ' ') && ok)
ok = false;
break;
}
else if(c == '-')
{
if(!ok)
semn = -1;
else
{
fflush(stdin);
break;
}
}
else
{
nr = nr*10 + (c - '0');
ok = true;
cifre ++;
if(cifre == 10)
break;
}
}
if(!ok)
printf("%s",mesaj);
else return semn*nr;
}
return -1;
}

我可以编写一个通用函数来读取以下类型:int、float、double、long long 吗?

第一种无效情况可以使用 scanf 函数返回的值来解决,但我不知道如何解决第二种情况(只能使用上面的方法)。

并且该功能需要可移植。

最佳答案

#include <stdio.h>
#include <stdlib.h>

#define PROC(type) \
if(*endp){\
printf("enter a valid " #type " number.\n");\
return NULL;\
}\
if(ret = malloc(sizeof(v)))\
*(type*)ret = v;\
/**/

void *GetNumber(const char *type){
void *ret = NULL;
char temp[32], *endp;
scanf("%31s", temp);
if(strcmp("int", type)==0){
int v = strtol(temp, &endp, 10);
PROC(int)
} else if(strcmp("long long", type)==0){
long long v = strtoll(temp, &endp, 10);
PROC(long long)
} else if(strcmp("float", type)==0){
float v = strtod(temp, &endp);
PROC(float)
} else if(strcmp("double", type)==0){
double v = strtod(temp, &endp);
PROC(double)
}
return ret;
}

int main(){
int *vi;
float *vf;
while((vi = GetNumber("int")) == NULL)
;
printf("%d\n", *vi);
free(vi);
if(vf = GetNumber("float"))
printf("%f\n", *vf);
free(vf);
return 0;
}

关于c - 将类型发送到函数并读取特定数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com