函数指针-变量未初始化 #包括 整数计算(整数n1,整数n2,整数(*func)(整数n1,整数n2)) { 返回函数(n1,n2); } 整数加(整数n1,整数n2) { 返回n1+n2; } 整数减(整数n1,整数n2) { 返回n1-n2; } 内部主(空) { int n1,n2; int结果; 字符标记; printf(“입력 : "); 扫描频率(“%d”&n1); printf(“选择函数:”); scanf_s(“%c”和mark,sizeof(mark)); printf(“입력 : "); 扫描频率(“%d”和“n2”); 开关(标记) { 格“+”: 结果=计算值(n1,n2,加上); 案例'-': 结果=计算值(n1,n2,负); } printf(“%d\n”,结果); 返回0; }
我正在用简单的代码研究C中的函数指针。我使用scanf_s使其初始化变量结果,但它向我发送了一条错误消息,通知我变量结果未初始化。如何修复此代码?您尚未初始化结果变量,您使用scanf_s对n1、n2进行初始化,但您没有对结果执行任何操作,因此编译器C抱怨你有两个问题: 1.您将函数指针-变量未初始化 #包括 整数计算(整数n1,整数n2,整数(*func)(整数n1,整数n2)) { 返回函数(n1,n2); } 整数加(整数n1,整数n2) { 返回n1+n2; } 整数减(整数n1,整数n2) { 返回n1-n2; } 内部主(空) { int n1,n2; int结果; 字符标记; printf(“입력 : "); 扫描频率(“%d”&n1); printf(“选择函数:”); scanf_s(“%c”和mark,sizeof(mark)); printf(“입력 : "); 扫描频率(“%d”和“n2”); 开关(标记) { 格“+”: 结果=计算值(n1,n2,加上); 案例'-': 结果=计算值(n1,n2,负); } printf(“%d\n”,结果); 返回0; },c,scanf,C,Scanf,我正在用简单的代码研究C中的函数指针。我使用scanf_s使其初始化变量结果,但它向我发送了一条错误消息,通知我变量结果未初始化。如何修复此代码?您尚未初始化结果变量,您使用scanf_s对n1、n2进行初始化,但您没有对结果执行任何操作,因此编译器C抱怨你有两个问题: 1.您将'\n'放在scanf_s(“%d”、&n1)之后的输入缓冲区中;然后将其作为scanf_s(“%c”、&mark、sizeof(mark));在尝试使用%c读取之前,必须删除尾随的换行符。一个简单的空stdin函数即可
'\n'
放在scanf_s(“%d”、&n1)
之后的输入缓冲区中;然后将其作为scanf_s(“%c”、&mark、sizeof(mark));
在尝试使用%c
读取之前,必须删除尾随的换行符。一个简单的空stdin
函数即可
e、 g
总而言之,你可以做到:
switch (mark)
{
case '+':
result = Calc(n1, n2, Plus);
break;
case '-':
result = Calc(n1, n2, Minus);
break;
}
这个代码是unfixable@SeanF为什么不可编译?只是开玩笑。在开关中添加一个默认大小写,只是为了使其可编译。初始化结果。如果使用变量,则无论采用何种路径,它都必须初始化。任何东西都是可修复的,但我试着使用函数Calc-包括函数加号和减号-来初始化结果。您应该清理缓冲区扫描%d后,因为扫描后会有一个\n,有时需要这样做。
:)
这次不是:-)你在说什么?你总是可以简单地%c”
到每个空格,但是如果第一个条目是1 2-3
,你就要清空\u stdin()
每次输入后——上面的例子只是说明了他的问题——你还有其他想法吗?我看不懂你的心思。保持简单的吻保持简单的吻
#include <stdio.h>
void empty_stdin ()
{
int c = getchar();
while (c != '\n' && c != EOF)
c = getchar();
}
...
printf("입력 : ");
scanf_s("%d", &n1);
empty_stdin(); /* remove all extraneous chars from stdin */
printf("choose function : ");
scanf_s("%c", &mark, sizeof(mark));
switch (mark)
{
case '+':
result = Calc(n1, n2, Plus);
break;
case '-':
result = Calc(n1, n2, Minus);
break;
}
#include <stdio.h>
void empty_stdin ()
{
int c = getchar();
while (c != '\n' && c != EOF)
c = getchar();
}
int Calc(int n1, int n2, int(*func) (int n1, int n2))
{
return func(n1, n2);
}
int Plus(int n1, int n2)
{
return n1 + n2;
}
int Minus(int n1, int n2)
{
return n1 - n2;
}
int main(void)
{
int n1, n2;
int result = 0;
char mark;
printf("입력 : ");
scanf_s("%d", &n1);
empty_stdin();
printf("choose function : ");
scanf_s("%c", &mark, sizeof(mark));
printf("입력 : ");
scanf_s("%d", &n2);
switch (mark)
{
case '+':
result = Calc(n1, n2, Plus);
break;
case '-':
result = Calc(n1, n2, Minus);
break;
}
printf("%d\n", result);
return 0;
}
$ ./bin/fnpointer
입력 : 2
choose function : +
입력 : 3
5