C 无法打印整个整型数组
我的输出:C 无法打印整个整型数组,c,arrays,string,for-loop,atoi,C,Arrays,String,For Loop,Atoi,我的输出:612345644067870 我想要的是这个输出:1012345644067870455588 为什么我的程序没有打印所有的整数?谁能帮我检查一下我的代码有什么问题吗?我应该对代码做哪些更改?这是我的密码 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> main() { char m[100][1000]={"12
612345644067870
我想要的是这个输出:1012345644067870455588
为什么我的程序没有打印所有的整数?谁能帮我检查一下我的代码有什么问题吗?我应该对代码做哪些更改?这是我的密码
#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;
}
#包括
#包括
#包括
#包括
main()
{
字符m[100][1000]={“123456”、“44”、“67”、“87”、“45”、“55”、“88”};
内伦;
int i;
int j;
int k;
int n;
整数毫米[1000];
n=0;
len=strlen(m[n++]);
printf(“%d\n”,len);
对于(i=0;i快速查看,我会说这是因为在两个维度上使用相同的长度(len)
你们的维度是不同的
len=strlen(m[n++]); // m[0]
printf("%d\n",len);
打印字符串“123456”=6的长度
[编辑]
如何获取数组的长度
len=0;
对于(i=0;i<100;i++){
如果(m&&m[i][0]='\0'){
打破
}
len++;
}
printf(“%d\n”,len);
[注意]如果您使用的是“0”
而不是“
来打印0
,则此操作有效。如果您希望输出,请执行此操作
目前,您获取第一个字符串的长度,“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".
您的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[0]); n=n+1;
因此strlen()
此处将返回数组中第一个strin的长度(m[0]
),而不是m
数组的元素数。我的建议是,您应该尝试调试代码,然后逐行查看哪里出了问题。不过,最可能的问题是索引长度。
在每次迭代中,您仍然使用相同长度的字符串len=strlen(m[n++]);
,当然,对于其余的迭代来说,这是不正确的
尝试从第一个开始:
len = sizeof m / sizeof m[0];
然后使用循环中的第一个索引查看表格,例如GLGL的答案:
while (m[--len][0]);
#包括
#包括
#包括
int main(){
字符m[100][1000]={“123456”、“44”、“67”、“87”、“45”、“55”、“88”};
内伦;
int i,j,k,n;
整数毫米[1000];
对于(len=100;len>0;--len)
如果(*m[len-1])中断;
printf(“%d\n”,len);
对于(i=0;i)我会将m
声明为一个全局或静态变量。它太大,无法停留在main
len=strlen(m[n++]);
for(j=0;jDid我编辑了至少三篇文章的标题(和)在过去几天中?只要正确使用标记C,就不需要在标题中添加C编程。请尝试使用GDB check进行调试以获取更多信息。它将帮助您在运行时检查表达式的值以及它的用户友好性。希望这可能对您有所帮助。在使用调试器之前,它将帮助您你拿着纸和笔,一步一步地完成你的程序。请先自己完成。然后,如果你在某个你不理解的特定步骤中,问一个关于该步骤的精确问题。好的,谢谢。我怎样才能得到整个字符串的长度?@user3118123:哪个“完整”字符串。有10个。@user3118123:它是否约束NULL(“\0”)是数组的结尾。如果是,从零开始计数,直到遇到“\0”。如果不是,则不知道某个元素是否是数组中的最后一个元素。因此,循环100个元素以了解最后一个元素的索引。更新了我的ans;请查看
len = sizeof m / sizeof m[0];
while (m[--len][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;
}