2015-09-17 35 views
-2

我已经尝试在C中创建一个动态数组,但我不会让它工作,所以我试图使用一个正常的数组,我只是删除了正在打印的其余数字出。 我有一个阵列:数组删除打印出来的其余数字C

int array[100]; 

此阵列将存储100个号码,annd这些数字将与一个for循环扫描英寸在for循环我有一个if语句:

if(array[i] == 0) 
{ 
    break; 
} 

,所以如果我扫描数0 for循环将打破和代码将继续。 当我扫描正常数字时,我想要例如扫描20个数字。该数组有100个数字点,但我只写1-20,然后输入0,这会导致循环中断。 然后我有一个for循环打印数组。 printf打印整个数组1-20,在20之后它将开始打印剩余的80个没有分配数字的数字。 所以我的问题是我如何能够删除所有这些休息数字打印出我的实际扫描后我的1-20号码?我只想要扫描的数字不是全部显示100.

+4

尼斯介绍,但问题是比较容易回答,如果我们能看到的代码。 –

+0

循环变量'i'是否包含中断后扫描的整数数? –

+0

中断后,它进入一个排序函数,从最低到最高排序所有数字。休息后它不扫描任何东西。 – andrewjones

回答

0

为什么不保留一个knt变量并在每次扫描一个数字时增加它,然后您就会知道数组有多大。所以打印出来,你可以这样做:

for(int a = 0; a < knt; ++a) { 
    printf("%d", array[a]); 
} 
+0

所以我应该让knt = 1;第一次,然后在for循环中,我会做knt ++;对? – andrewjones

+0

@sameizad由于您在扫描任何内容之前声明了knt,因此没有以'knt = 0'开头。 @ vish4071有一个更简单的解决方案,但我会用他的。 – JackVanier

+0

是的,但在此之前,我试图做你刚才写的东西。如果我以knt = 0开头,那么循环将不会启动,因为! andrewjones

1

从你的描述我会想你只需要存储最后i(从array[i])和打印所有元素的数组直到最后一个号码。您可以通过运行循环到<<=这个最新索引来选择是否要拖尾零。

+0

我将如何能够找到最后当我有100个点时,只需扫描20个?我将如何找到20个我?假设我们现在知道我将以20个整数进行扫描,但是后来我无法知道用户将在输入中写入多少个整数。 – andrewjones

+0

打破循环的if条件应该有最后一个'i'。 – JeffRSon

2

使用此:

i=0; 
while(array[i]){ 
    printf("%d\n",array[i++]); 
} 

编辑:
的意见后,所有的,我想我会写一个简单的代码,你在你的场景中使用。我已经评论了代码。它应该可以帮助你理解一切。如果你仍然有疑问,请随意。

#include<stdio.h> 

void sortera(int array[], int n, int m) 
{ 
    int tmp,i,j; 
    for(i=n; i<m; i++) 
    { 
     for(j=n;j<m; j++) 
     { 
      if(array[j]>array[j+1]) 
      { 
       tmp=array[j]; 
       array[j]=array[j+1]; 
       array[j+1]=tmp; 
      } 
     } 
    } 
} 

int main(){ 
    int i,c; 
    int a[100]; 
    c=0;  //this c keeps the count 
    for(i=0;i<100;i++){  //since 100 is the max limit 
     scanf("%d",&a[i]); 
     c++;    //this is what @JackWilliams meant you to do 
     if(a[i]==0) 
      break; 
    } 
    printf("\nInput array\n"); 
    i=0; 
    while(a[i]) 
     printf("%d\n",a[i++]);  //this is my snippet that prints all values 
    //now sorting. I changed the algo a bit that you wrote (basic idea is same though) 
    //This code sorts the array elements in range n..m, inclusive of n and xclusive of m 
    //Since arrays in c are (by default) passed by reference, you just need to sort them. No return value is required 
    sortera(a,0,c); 
    //Now I use @JackWilliam's method to print the array 
    printf("\nSorted Array:\n"); 
    for(i=0;i<c;i++) 
     printf("%d\n",a[i]); 
    return 0; 
} 
+0

嗯,这工作和打印阵列为我exacly像我想要的,但我有一个函数,为我排序的所有数字,所以我有这个功能; sort(array,i,j);但是当我添加你的代码时,它不会打印出排序的数字,它会打印出未排序的数字。 – andrewjones

+0

我的代码只是打印数组从开始到数组[i]为'0'的点。它然后不打印任何东西。如果你的排序函数正确地对数组进行排序,则从'i..j'开始,'array [j + 1]'的值应该是'0',这一行*将*正确地打印数组。 – vish4071

+0

这可能是你的排序功能是越野车。如果你发布整个代码,我想我可以帮忙,否则它是不可能的。 – vish4071