我对使用C语言进行编程还很陌生,但是我一直试图解决最后一个问题,但是现在我不知道该怎么做。
我正在读取带有“输入”功能的字符串,每当有空格时,该字符串都会分成几部分。这些部分存储在char数组中,到目前为止,它可以正常工作。但是,当我在main中调用下一个函数“ checkInput”时,char数组再次为空。我必须更改什么,以便在调用下一个函数时char数组不为空?
当我使用scanf代替fgets时,它起作用了。但是为什么呢?
任何帮助将不胜感激。
void input(char* string1, char* string2, char* string3)
{
char ptr[100];
printf("Enter String: \n");
fgets(ptr, 100, stdin);
printf("%s \n", ptr);
if(ptr != NULL)
{
string1 = strtok(ptr, " \n");
printf("string1: %s \n", string1);
}
if(ptr != NULL)
{
string2 = strtok(NULL, " \n");
printf("string2: %s \n", string2);
}
if(ptr != NULL)
{
string3 = strtok(NULL, " \n \0");
printf("string3: %s \n", string3);
}
}
int checkInput(char* string1, char* string2, char* string3)
{
if(isExponentiation(string1))
{
return TRUE;
}
else if(isSqrt(string1) && isNumber(string2))
{
return TRUE;
}
else if(isOperator(string1) && isNumber(string2) && isNumber(string3))
{
return TRUE;
}
else if(isOperator(string2) && isNumber(string1) && isNumber(string1))
{
return TRUE;
}
else if(isOperator(string3) && isNumber(string1) && isNumber(string2))
{
return TRUE;
}
else return FALSE;
}
int main(void)
{
while(1)
{
char string1[100];
char string2[100];
char string3[100];
input(string1, string2, string3);
if(checkInput(string1, string2, string3))
{
double out = calculate(string1, string2, string3);
output(string1, string2, string3, out);
}
else
{
printf("Error! \n \n");
}
}
return 0;
}
由于您在string1, string2, string3
中将main()
声明为100个字符的数组,每个数组具有自动存储持续时间,因此已经为input()
中的数组提供了存储。要使字符串返回main()
并避免ptr
中的input()
的存储在返回时变为无效的问题,最简单的方法就是将strcpy
中的字符串标记添加到input()
,例如: >
void input(char* string1, char* string2, char* string3) { char ptr[100], *p = ptr; printf ("Enter String: \n"); fgets (p, 100, stdin); printf("%s \n", ptr); if (p != NULL) { p = strtok (p, " \n"); if (p) strcpy (string1, p); printf("string1: %s \n", string1); } if (p != NULL) { p = strtok (NULL, " \n"); if (p) strcpy (string2, p); printf("string2: %s \n", string2); } if (p != NULL) { p = strtok (NULL, " \n \0"); if (p) strcpy (string3, p); printf("string3: %s \n", string3); } }
现在
string1, string2
和string3
将保持有效,直到退出main()
并且程序结束。