2013-12-20 86 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; 
}