2014-10-07 137 views
0

我刚开始C编程,我是新手。我做了一些研究,但不幸的是找不到我的问题。不能使用BTW阵列,这就是为什么我不使用它。无法获得我想要的输入

所以,我正在制作一个函数来打印与给定数量一样多的恒星。但功能是打印最后一个输入号码。

#include <stdio.h> 

int main(){ 

    void pstr(int *m){ 
     int j; 
     for(j = 0; j < *m; j++) 
      printf("*"); 
      printf("\n"); 
    } 

    int i; 
    int number = 9; 
    int n1, n2, n3, n4, n5, n6, n7, n8, n9; 

    printf("Enter 9 numbers (all less than 50):\n|1-2-3-4-5-6-7-8-9|\n"); 
    printf("|-----------------|\n ");   
    for(i=0; i < number; i++)           
     scanf("%d", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9); 

    pstr(&n1); 

    system("PAUSE"); 
} 

我试图打印第一个输入号码,但是它写了最后一个(n9)。对不起,我的英文,谢谢。

+0

我惊讶的是,这个编译自C函数不能被埋在另一个函数中。 I.E.将pstr函数移动到行之前int main(void)< - 一定要包含'void' – user3629249 2014-10-08 04:12:34

回答

3

您的scanf()格式字符串错误。

scanf("%d", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9); 

您必须在您的情况下,一个%每次转换,所以9。这意味着for是毫无意义的。

另外,您必须检查scanf()是否会返回预期的成功转换次数,否则您不能依赖具有适当值的变量。

+0

谢谢,但是当我再添加8个%s时,它会输出第二个输入减1. 1 – HalilM 2014-10-07 12:36:29

+0

@HalilM,Umm,不应该'%s'是'%d'? – 2014-10-07 12:36:43

+0

我试图让它复数,所以是的这是%d :)。 – HalilM 2014-10-07 12:38:18

0

申报号码为:

int n[9]; 

代替

int n1, n2, n3, n4, n5, n6, n7, n8, n9; 

然后使用循环为:

for(i=0; i < number; i++)           
     scanf("%d", &n[i]); 

此外,使用的scanf之前,fflush输出缓冲器,

fflush(stdout); 
+2

OP说:“不能使用阵列顺便说一句,这就是为什么我不使用它。” – usr2564301 2014-10-07 12:39:37

3
scanf("%d %d %d %d %d %d %d %d %d ", &n1, &n2, &n3, &n4, &n5, &n6, &n7, &n8, &n9); 

虽然更好的方法是使用数组和循环。既然你是新手,我认为你还不知道。暂时使用这个。