无法打印整个int数组

时间:2013-12-20 08:00:33

标签: c arrays string for-loop atoi

我的输出:6 123456 44 0 67 87 0

我想要的是这个输出: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;   
}

6 个答案:

答案 0 :(得分:3)

你的m数组是一个2D数组。

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()这里将返回数组中第一个strin的长度(m[0]),而不是m数组的元素数。

答案 1 :(得分: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

,则此方法有效

答案 2 :(得分: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 :(得分:1)

我的推荐是你应该尝试调试你的代码,然后逐行查看错误的地方。但是很可能你的问题在于索引长度。 在每次迭代的情况下,你仍然使用字符串len=strlen(m[n++]);的相同长度,对于其余的字符串当然不是这样。

尝试从第一个开始:

len = sizeof m / sizeof m[0];

然后使用循环中的第一个索引查看表格,例如在glglgl的答案中:

while (m[--len][0]);

答案 4 :(得分:0)

快速浏览一下,我会说这是因为你在两个维度上使用相同的长度(len)

并且您的尺寸不同

答案 5 :(得分: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;
}