第一个问题:我可以将该类型发送给函数吗? 例如,如果我编写适用于任何类型的泛型函数。
第二个问题: 我想编写一个函数来确保我读取以下数据类型之一: int,float,double,long long 。
如果我读了一个int:
,我希望它能如何工作唯一有效的案例是:
以下是此功能的代码:
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
函数返回的值来解决,但我不知道如何解决第二种情况(仅使用上述方法)。
该功能需要便携。
答案 0 :(得分:0)
不,您无法发送该类型,但您可以发送enum
:
typedef enum {
MY_NONE,
MY_INT,
MY_FLOAT,
MY_DOUBLE,
MY_LL
} Mytype;
在您的功能中,使用enum
上的开关。另外,在缓冲区上使用sscanf
,并使用相应的格式。阅读int
内部空白会让您感到麻烦;也许看看语言环境,你可能会找到解决方案。
答案 1 :(得分:0)
#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;
}