在终端(C 文件)中运行程序并且未运行到完成

  • 本文关键字:运行 程序 文件 终端 c unix
  • 更新时间 :
  • 英文 :


>我刚刚完成了 C 类的第一个家庭作业,我的家庭作业文件没有运行完成。

这是我的编译器代码:

$ cd hw1
$ gcc -o hw1 hw1.c
$ ./hw1

这是来自hw1.c的代码

#include <stdio.h>
#include <limits.h>
void ranges() {
printf("Signed Char/n");
printf("Minimum Value  = %dn", SCHAR_MIN);
printf("Maximum Value = %dn", SCHAR_MAX);
printf("Unsigned Charn");
printf("Minimum Value = 0n");
printf("Maximum Value = %dn", UCHAR_MAX);
printf("Signed Short n");
printf("Minimum value = %dn", SHRT_MIN);
printf("Maximum value = %dn", SHRT_MAX);
printf("Unsigned Short n");
printf("Minimum Value = 0n");
printf("Maximum value = %dn", USHRT_MAX);
printf("Signed Integer n");
printf("Minimum value = %dn", INT_MIN);
printf("Maximum value = %dn", INT_MAX);
printf("Unsigned Integer n");
printf("Minimum Value = 0n");
printf("Maximum value = %udn", UINT_MAX);
printf("Signed Long n");
printf("Minimum value = %lin", LONG_MIN);
printf("Maximum value = %lin", LONG_MAX);
printf("Unsigned Long n");
printf("Minimum Value = 0n");
printf("Maximum value = %lun", ULONG_MAX);
}
int factorial1(int n) {
int res = 1;
int i;
for (i = 1; i <= n; i++)
res = res * i;
return res;
}
int factorial2(int n) {
int res = 1;
int i = 1;
while (i <= n);{
res = res * i;
i++;
}
return res;
}
int factorial3(int n) {
int res = 1;
int i = 1;
do{
res = res * i;
i++;
}
while (i <= n);
return res;
}
int factorial4(int n) {
if (n >= 1)
return n*factorial4(n-1);
else
return 1;
}

void types() {
char a1,b1,c1,*p1,*p2,*p3;
short a2,b2,c2,*p4,*p5,*p6;
int a3,b3,c3,*p7,*p8,*p9;
double a4,b4,c4,*p10,*p11,*p12;
p1=&a1;
p2=&b1;
p3=&c1;
p4=&a2;
p5=&b2;
p6=&c2;
p7=&a3;
p8=&b3;
p9=&c3;
p10=&a4;
p11=&b4;
p12=&c4;
printf("nAddress of %p %ut", p1,p1);
printf("nAddress of %p %ut", p2,p2);
printf("nAddress of %p %ut", p3,p3);
printf("nAddress of %p %ut", p4,p4);
printf("nAddress of %p %ut", p5,p5);
printf("nAddress of %p %ut", p6,p6);
printf("nAddress of %p %ut", p7,p7);
printf("nAddress of %p %ut", p8,p8);
printf("nAddress of %p %ut", p9,p9);
printf("nAddress of %p %ut", p10,p10);
printf("nAddress of %p %ut", p11,p11);
printf("nAddress of %p %unnnn", p12,p12);
}

// test code; do not modify                                                                                                     
int main() {
ranges();
printf("factorial1(10) = %dn", factorial1(10));
printf("factorial2(10) = %dn", factorial2(10));
printf("factorial3(10) = %dn", factorial3(10));
printf("factorial4(10) = %dn", factorial4(10));
printf("n");
types();
return 0;
}

但是,当我使用 $ ./hw1 运行程序时,输出在阶乘 1 函数之后停止。 再说一次,我是C的新手,所以这正常吗?我是否需要执行某些操作才能查看输出的其余部分? 为新手问题道歉并尝试搜索,但无法弄清楚我的代码是错误的还是其他东西。 下面是输出:

Signed Char
Minimum Value  = -128
Maximum Value = 127
Unsigned Char
Minimum Value = 0
Maximum Value = 255
Signed Short 
Minimum value = -32768
Maximum value = 32767
Unsigned Short 
Minimum Value = 0
Maximum value = 65535
Signed Integer 
Minimum value = -2147483648
Maximum value = 2147483647
Unsigned Integer 
Minimum Value = 0
Maximum value = 4294967295d
Signed Long 
Minimum value = -9223372036854775808
Maximum value = 9223372036854775807
Unsigned Long 
Minimum Value = 0
Maximum value = 18446744073709551615
factorial1(10) = 3628800

谢谢

您在factorial2中有一个拼写错误,导致无限循环:

while (i <= n);{

应该是:

while (i <= n) {

最新更新