我的输出: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;
}
答案 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;
}