2013-12-20 85 views
-1

我的輸出:6 123456 44 0 67 87 0無法打印整個int數組

我想是這樣的輸出:10 123456 44 0 67 87 0 0 45 55 88

爲什麼我的程序沒有打印所有的整數?任何人都可以請幫我檢查我的代碼有什麼問題嗎?我應該對我的代碼做些什麼改變?這是我的代碼。

#include <stdio.h> 
#include <string.h> 
#include <ctype.h> 
#include <stdlib.h> 
main() 
{ 
     char m[100][1000]={"123456","44","","67","87","","","45","55","88"}; 
     int len; 
     int i; 
     int j; 
     int k; 
     int n; 
     int numm[1000]; 
     n=0; 
     len=strlen(m[n++]); 
     printf("%d\n",len); 
     for (i=0;i<len;i++) 
      numm[i]=atoi(m[i]); 
     for (j=0;j<len;j++) 
      printf("%d\n",numm[j]); 
     for (k=1;k<len;k++) 
     { 
      if (numm[k]>100||numm[k]<0) 
      { 
       printf("Error. Marks out of range.\n"); 
       exit(0); 
      } 
     } 
     return 0; 
} 
+0

這是'INT主()'。 – glglgl

+0

我會聲明'm'爲全局變量或靜態變量。在main' –

+0

'len = strlen(m [n ++]);''for(j = 0; j moeCake

回答

0

掃一眼我會說,它是因爲你使用的是相同的長度(LEN)兩個維度

你的尺寸型動物串

1
len=strlen(m[n++]); // m[0] 
printf("%d\n",len); 

打印長度「123456 「= 6

[編輯]

如何獲得數組的長度

len = 0; 

    for (i = 0; i < 100; i++) { 
     if (m && m[i][0] == '\0') { 
      break; 
     } 
     len++; 
    } 
    printf("%d\n",len); 

[注]這個工程提供您使用"0",而不是""打印0

+0

好的,謝謝。我怎樣才能得到整個字符串的長度? –

+1

@ user3118123:**其中**「*整個*」字符串。有10 – alk

+0

@ user3118123:它有約束,NULL('\ 0')是數組的結尾。如果是,則從零開始計數,直到遇到'\ 0'。如果不是,那麼你不會知道一個元素是否是數組中的最後一個元素。因此,循環100個元素來知道最後一個元素的索引。 – David

1

好吧,如果你想要的是輸出,做吧!

當前,您將第一個字符串的長度爲"123456",並濫用它作爲數組的長度,這是完全不相關的。

數組的大小計算爲sizeof m/sizeof m[0],其中sizeof m爲總大小(以字節爲單位),sizeof m[0]大小爲第一個元素。

但是,你會打印1000個元素。但是你只想打印聲明的。

作爲char[100][1000],這對我來說似乎很難;你最好使用char * m[1000]

但是你可以做

len = sizeof m/sizeof m[0]; // initial length 
while (!m[--len][0]); // decrement len until you find "something". 
3

你米陣列是一個二維數組。

m[0]="123456" | m[0][0]='1' m[0][1]='2' ... 
m[1]="44"  | m[0][0]='4' m[0][1]='4' 
m[2]=""  | m[0][0]='\0' 
m[3]="67" 

int n=0; len=strlen(m[n++]); 

相當於

int n=0; len=strlen(m[0]); n=n+1; 

所以strlen()這裏將返回則第一〜應變的長度的陣列(m[0]),而不是在元件的數量的m數組。

1

我的建議是,您應該嘗試調試您的代碼,然後逐行查看其錯誤的地方。但很可能你的問題在於索引長度。 在每次迭代的情況下,您仍然使用字符串len=strlen(m[n++]);的相同長度,這對其他人當然不適用。

嘗試先從第一種:

len = sizeof m/sizeof m[0]; 

,然後通過使用表中第一個索引查找在一個循環中,例如像在glglgl的答案:

while (m[--len][0]); 
0
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(){ 
    char m[100][1000]={"123456","44","","67","87","","","45","55","88"}; 
    int len; 
    int i,j,k,n; 
    int numm[1000]; 

    for(len = 100 ; len >0; --len) 
     if(*m[len-1]) break; 
    printf("%d\n",len); 
    for (i=0;i<len;i++) 
     numm[i]=atoi(m[i]); 
    for (j=0;j<len;j++) 
     printf("%d\n",numm[j]); 
    for (k=1;k<len;k++){ 
     if (numm[k]>100||numm[k]<0){ 
      printf("Error. Marks out of range.\n"); 
      exit(0); 
     } 
    } 
    return 0; 
}