代码执行中的第一个函数,但不执行第一个函数后面的代码
First function in code executing, but code following the first function is not executed
我的代码执行第一个函数,但不执行第一个函数之后的任何内容。我使用 gcc -o -Wall
编译并且没有收到任何错误消息。
当我尝试执行代码时,我在底部收到执行。我不确定为什么程序不会执行更多代码。在第一个函数中,我可以向该函数添加更多内容以使其正常工作,但它不会触及其他函数。
1 #include <stdio.h>
2 //functions prototypes
3 void compute_discount(void);
4 int print_results(void);
5
6
7 //defined Gloabal var
8 double Mdisc;
9 double Cost_of_purchase;
10 double DiscTot;
11 double Sales_tax;
12 double Total_price;
13 char military;
14
15 int main (void) {
16 //declare variables
17
18 //Cost of purchase
19 printf("Cost of purchase?\t\t$");
20 scanf ("%lf",&Cost_of_purchase);
21
22 //Military?
23 printf("In military (y or n)?\t\t\n");
24 scanf("%s",&military);
25
26 }
27
28
29 //function to compute discount
30 void compute_discount(void){
31
32 //compute military discount
33 switch(military){
34 case 'y':
35 case 'Y':
36 if(Cost_of_purchase > 150) {
37 Mdisc = .15 * Cost_of_purchase;
38 } else if (Cost_of_purchase < 150) {
39 Mdisc = .10 * Cost_of_purchase;
40 }
41 break;
42 case 'n':
43 case 'N':
44 Mdisc = 0;
45 break;
46 default:
47 printf("Error:bad input");
48 }
49
50 //cost minus military discount
51 DiscTot = Cost_of_purchase - Mdisc;
52 //sales tax
53 Sales_tax = .05 * DiscTot;
54 //Total Calculated
55 Total_price = DiscTot + Sales_tax;
56
57 printf("maybe this is the problem%f",Mdisc);
58 }
59
60 //function to print results
61 int print_results(void){
62
63 //if input is n N y Y then use below, this is not dependant on if military only if the letter is accepted
64 switch(military){
65 case 'y':
66 case 'Y':
67 case 'n':
68 case 'N':
69 printf("Military discount (15%%): \t\t$%f", Mdisc);
70 printf("Discounted total: \t\t$%f", DiscTot);
71 printf("Sales tax (5%%): \t\t$%f", Sales_tax);
72 printf("Total: \t\t$%f", Total_price);
73 break;
74 }
75 return(0);
76 }
执行结果:
[p18d541@csci112 lab1]$ gcc -o lab1 -Wall lab1.c
[p18d541@csci112 lab1]$ ./lab1
Cost of purchase? 0
In military (y or n)?
y
[p18d541@csci112 lab1]$
我想知道还需要做些什么来解决这个问题,或者我可以用什么方法让程序执行 int main()
以外的那些功能。
这一行:
scanf("%s",&military);
您传递的是单个 char
的地址。虽然 %s
格式说明符期望传递的是 char *
参数,但它还期望它指向数组的第一个字节,以便它可以存储字符串。因此,当只有一个字节可用时,该函数会尝试写入多个字节。超出对象边界的写入会触发 undefined behavior.
这可以通过使用用于读取单个 char
的 %c
格式说明符来解决。您还需要在它之前添加一个 space 以使用先前 scanf
留在输入缓冲区中的换行符:
scanf(" %c",&military);
您也从未调用过 compute_discount
和 print_results
,因此您需要在阅读用户输入后调用。
int main (void)
{
printf("Cost of purchase?\t\t$");
scanf ("%lf",&Cost_of_purchase);
//Military?
printf("In military (y or n)?\t\t\n");
scanf(" %c",&military);
compute_discount();
print_results();
return 0;
}
您定义了要使用的函数,但根本没有调用这些函数。想象一个场景,您想要定义一个函数来对两个数字 int a
和 int b
求和,然后调用该函数来计算总和。它将是:
int sum(int a, int b) {
return a + b;
}
int main() {
int a = 5;
int b = 10;
printf("result: %d\n", sum(a, b));
// ^^^^^^^^^
// call sum function
}
意思是定义了函数之后,你需要使用它,所以你的main
就是:
int main (void) {
printf("Cost of purchase?\t\t$");
scanf ("%lf",&Cost_of_purchase);
printf("In military (y or n)?\t\t\n");
scanf("%s",&military);
// Finally call your defined functions:
compute_discount();
print_results();
}
其他函数(除了main
)没有被执行,因为它们从未被调用过。 main
在您 运行 程序时自动调用,但必须显式调用任何其他函数。在第二个 scanf
.
之后,在 main 底部添加对 compute_discount
和 print_results
的调用
顺便说一句,你的第二个 scanf
特别危险,因为你使用 "%s"
格式来读取单个字符......如果用户输入“是”会发生什么...... 'e' 和 's' 去哪儿了?
我的代码执行第一个函数,但不执行第一个函数之后的任何内容。我使用 gcc -o -Wall
编译并且没有收到任何错误消息。
当我尝试执行代码时,我在底部收到执行。我不确定为什么程序不会执行更多代码。在第一个函数中,我可以向该函数添加更多内容以使其正常工作,但它不会触及其他函数。
1 #include <stdio.h>
2 //functions prototypes
3 void compute_discount(void);
4 int print_results(void);
5
6
7 //defined Gloabal var
8 double Mdisc;
9 double Cost_of_purchase;
10 double DiscTot;
11 double Sales_tax;
12 double Total_price;
13 char military;
14
15 int main (void) {
16 //declare variables
17
18 //Cost of purchase
19 printf("Cost of purchase?\t\t$");
20 scanf ("%lf",&Cost_of_purchase);
21
22 //Military?
23 printf("In military (y or n)?\t\t\n");
24 scanf("%s",&military);
25
26 }
27
28
29 //function to compute discount
30 void compute_discount(void){
31
32 //compute military discount
33 switch(military){
34 case 'y':
35 case 'Y':
36 if(Cost_of_purchase > 150) {
37 Mdisc = .15 * Cost_of_purchase;
38 } else if (Cost_of_purchase < 150) {
39 Mdisc = .10 * Cost_of_purchase;
40 }
41 break;
42 case 'n':
43 case 'N':
44 Mdisc = 0;
45 break;
46 default:
47 printf("Error:bad input");
48 }
49
50 //cost minus military discount
51 DiscTot = Cost_of_purchase - Mdisc;
52 //sales tax
53 Sales_tax = .05 * DiscTot;
54 //Total Calculated
55 Total_price = DiscTot + Sales_tax;
56
57 printf("maybe this is the problem%f",Mdisc);
58 }
59
60 //function to print results
61 int print_results(void){
62
63 //if input is n N y Y then use below, this is not dependant on if military only if the letter is accepted
64 switch(military){
65 case 'y':
66 case 'Y':
67 case 'n':
68 case 'N':
69 printf("Military discount (15%%): \t\t$%f", Mdisc);
70 printf("Discounted total: \t\t$%f", DiscTot);
71 printf("Sales tax (5%%): \t\t$%f", Sales_tax);
72 printf("Total: \t\t$%f", Total_price);
73 break;
74 }
75 return(0);
76 }
执行结果:
[p18d541@csci112 lab1]$ gcc -o lab1 -Wall lab1.c
[p18d541@csci112 lab1]$ ./lab1
Cost of purchase? 0
In military (y or n)?
y
[p18d541@csci112 lab1]$
我想知道还需要做些什么来解决这个问题,或者我可以用什么方法让程序执行 int main()
以外的那些功能。
这一行:
scanf("%s",&military);
您传递的是单个 char
的地址。虽然 %s
格式说明符期望传递的是 char *
参数,但它还期望它指向数组的第一个字节,以便它可以存储字符串。因此,当只有一个字节可用时,该函数会尝试写入多个字节。超出对象边界的写入会触发 undefined behavior.
这可以通过使用用于读取单个 char
的 %c
格式说明符来解决。您还需要在它之前添加一个 space 以使用先前 scanf
留在输入缓冲区中的换行符:
scanf(" %c",&military);
您也从未调用过 compute_discount
和 print_results
,因此您需要在阅读用户输入后调用。
int main (void)
{
printf("Cost of purchase?\t\t$");
scanf ("%lf",&Cost_of_purchase);
//Military?
printf("In military (y or n)?\t\t\n");
scanf(" %c",&military);
compute_discount();
print_results();
return 0;
}
您定义了要使用的函数,但根本没有调用这些函数。想象一个场景,您想要定义一个函数来对两个数字 int a
和 int b
求和,然后调用该函数来计算总和。它将是:
int sum(int a, int b) {
return a + b;
}
int main() {
int a = 5;
int b = 10;
printf("result: %d\n", sum(a, b));
// ^^^^^^^^^
// call sum function
}
意思是定义了函数之后,你需要使用它,所以你的main
就是:
int main (void) {
printf("Cost of purchase?\t\t$");
scanf ("%lf",&Cost_of_purchase);
printf("In military (y or n)?\t\t\n");
scanf("%s",&military);
// Finally call your defined functions:
compute_discount();
print_results();
}
其他函数(除了main
)没有被执行,因为它们从未被调用过。 main
在您 运行 程序时自动调用,但必须显式调用任何其他函数。在第二个 scanf
.
compute_discount
和 print_results
的调用
顺便说一句,你的第二个 scanf
特别危险,因为你使用 "%s"
格式来读取单个字符......如果用户输入“是”会发生什么...... 'e' 和 's' 去哪儿了?