Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用while循环和数组时需要基本解释_Arrays_String_While Loop_Puts - Fatal编程技术网

Arrays 使用while循环和数组时需要基本解释

Arrays 使用while循环和数组时需要基本解释,arrays,string,while-loop,puts,Arrays,String,While Loop,Puts,// #包括“stdafx.h” #包括“stdio.h” #包括 void main() { 查尔夫妇[5][50]={“约翰·诺拉”、“保罗·凯西”、“汤姆·克莱尔”、“马丁·玛丽”、“托尼·特雷莎”}; char-male[5][51]; 女性[5][51]; int i; int j=0; printf(“男性:”); 对于(i=0;i

//

#包括“stdafx.h”
#包括“stdio.h”
#包括
void main()
{
查尔夫妇[5][50]={“约翰·诺拉”、“保罗·凯西”、“汤姆·克莱尔”、“马丁·玛丽”、“托尼·特雷莎”};
char-male[5][51];
女性[5][51];
int i;
int j=0;
printf(“男性:”);
对于(i=0;i<5;i++)
{
while(夫妻[i][j]!='')
{
男性[i][j]=夫妇[i][j];
j++;
}
男性[i][j]='\0';
puts(男性[i]);
j=0;
}       
printf(“\n”);
}

您好,我基本上是试图打印所有男性的名字,然后打印女性的名字(我还没有做这部分)。下面的代码确实有效,但是我发现很难理解它是如何工作的。比如,我不理解while(夫妻[I][j]!='')的意思。如果我试图用空格分隔字符串,为什么它不等于空格。我将感谢任何类型的帮助和解释的人可能有!谢谢

每一行“夫妇”可以被视为一个字符串(即字符数组),由两个名字组成,一个男性,一个女性,用一个空格字符分隔。“while”循环将配对的男性名称复制到单独的数组“male”中,一次一个字符。“while”循环的预期操作是继续复制字符,直到遇到分隔空格,然后放入“\0”以标记复制的男性名称字符串的结尾。但是“while”的意思是“只要某个条件为真,就这样做”,因此您希望为真的条件是空格不是当前正在查看的角色。在头一行“夫妇”中执行代码,如下所示:

#include "stdafx.h"
#include "stdio.h"  
#include <string.h>

void main()
{
char couples[5][50] = { "John Nora", "Paul Kathy", "Tom Claire", "Martin Mary", "Tony Teresa" };
char male[5][51];
char female[5][51];
int i;
int j = 0;

printf("Males: ");
for (i = 0; i < 5; i++)
{
    while (couples[i][j] != ' ')
    {
        male[i][j] = couples[i][j];
        j++;
    }
    male[i][j] = '\0';
    puts(male[i]);
    j = 0;
}       
printf("\n");


}

每一行“夫妇”可以被视为一个字符串(即字符数组),由两个名字组成——一个男性,一个女性——由一个空格字符分隔。“while”循环将配对的男性名称复制到单独的数组“male”中,一次一个字符。“while”循环的预期操作是继续复制字符,直到遇到分隔空格,然后放入“\0”以标记复制的男性名称字符串的结尾。但是“while”的意思是“只要某个条件为真,就这样做”,因此您希望为真的条件是空格不是当前正在查看的角色。在头一行“夫妇”中执行代码,如下所示:

#include "stdafx.h"
#include "stdio.h"  
#include <string.h>

void main()
{
char couples[5][50] = { "John Nora", "Paul Kathy", "Tom Claire", "Martin Mary", "Tony Teresa" };
char male[5][51];
char female[5][51];
int i;
int j = 0;

printf("Males: ");
for (i = 0; i < 5; i++)
{
    while (couples[i][j] != ' ')
    {
        male[i][j] = couples[i][j];
        j++;
    }
    male[i][j] = '\0';
    puts(male[i]);
    j = 0;
}       
printf("\n");


}

while
遇到空格时停止(因为
'!='
为false),但复制它前面的所有内容(因为空格以外的任何字符
!='
为true)。另外,
main()
应该返回
int
,而不是
void
void main()
是一个扩展,不是每个编译器都支持。谢谢,你知道我为什么把j增加1吗?那是因为
I
是每个C字符串的索引,
j
是字符串中每个字符的索引。例如,
夫妇[0]
“约翰·诺拉”
夫妇[0][0]
'J'
夫妇[0][1]
'o'
夫妇[0][2]
'h'
,等等。谢谢,我真的很感激!
while
遇到空格时停止(因为
'!='
为false),但复制它前面的所有内容(因为空格以外的任何字符
!='
为true)。另外,
main()
应该返回
int
,而不是
void
void main()
是一个扩展,不是每个编译器都支持。谢谢,你知道我为什么把j增加1吗?那是因为
I
是每个C字符串的索引,
j
是字符串中每个字符的索引。例如,
夫妇[0]
“约翰·诺拉”
夫妇[0][0]
'J'
夫妇[0][1]
'o'
夫妇[0][2]
'h'
,等等。谢谢,我真的很感激!
a) i=0 and j=0 and enter the 'while' loop:
b) couples[i][j] = 'J'.  Is 'J' != ' ' ? --> YES, copy 'J' to males[0][0], increment j
c) couples[i][j] = 'o'.  Is 'o' != ' ' ? --> YES, copy 'o' to males[0][1], increment j
d) couples[i][j] = 'h'.  Is 'h' != ' ' ? --> YES, copy 'h' to males[0][2], increment j
e) couples[i][j] = 'n'.  Is 'n' != ' ' ? --> YES, copy 'n' to males[0][3], increment j
f) couples[i][j] = ' '.  Is ' ' != ' ' ? --> NO, copy '\0' to males[0][4], reset j to 0