我正在尝试添加2D char数组的行和列。这样他们就形成了一个词。我知道如何添加2D int数组的元素,并试图在这里实现类似的解决方案。但它不起作用。
Example input:
a b c d
e f g h
i j k l
Example Output:
Row 1 word = abcd
Row 2 word = efgh
Row 3 word = ijkl
以下是代码:
#include <stdio.h>
int main()
{
unsigned int size;
char wordR;
printf("Enter size:\n");
scanf("%d",&size);
char word[size][size];
//Entering the matrix
for (int k = 0; k < (size); ++k){
for (int j = 0; j < (size); ++j){
printf("Enter letter: ");
scanf(" %c",&word[k][j]);
}
}
for (int k = 0; k < size; ++k){
for(int j = 0; j < size; ++j){
printf(" %c",word[k][j]);
}
printf("\n");
}
//Adding row elements
for(k = 0; k < size; ++k){
for(p = 0; p < size; ++p){
wordR += size[k][p];
}
printf("Word of the %i row is = %c\n",k,wordR);
}
}
答案 0 :(得分:3)
以下是精炼代码:
#include <stdio.h>
int main(void)
{
unsigned int size;
printf("Enter size:\n");
scanf("%u", &size); // size is unsigned, so use %u.
char word[size][size];
char wordR[size + 1]; // +1 for the terminating '\0'
wordR[size] = '\0'; // wordR[size] will always be '\0'.
int i, j;
//Entering the matrix
for (i = 0; i < size; ++i){
for (j = 0; j < (size); ++j){
printf("Enter letter: ");
scanf(" %c",&word[i][j]);
}
}
for (i = 0; i < size; ++i){
for(int j = 0; j < size; ++j){
printf(" %c",word[i][j]);
}
printf("\n");
}
//Adding row elements
for(i = 0; i < size; ++i){
for(j = 0; j < size; ++j){
wordR[j] = word[i][j];
}
printf("Word of the %i row is = %s\n", i, wordR);
}
}
这是声明
wordR += size[k][p];
阻止您的代码正常工作。可能你认为这会神奇地连接一个字符串,但不幸的是,它只是在size[k]
中加上字符的ascii值。无论如何,wordR
在您的代码中定义为char
,单个char
如何包含整个字符串(即char
数组)?
您的代码中也存在一些小问题,我已对其进行了一些更改。有关详细信息,请参阅注释。
答案 1 :(得分:2)
wordR + = size [k] [p];
这并不像你想象的那样有效。 它不是在C中连接字符串的方法。
此外wordT
是char
,这意味着它是单个字符。
你在上面做的是对ASCII字符代码进行简单的数学运算。
答案 2 :(得分:2)
一些主要问题:首先,变量wordR
是单个字符,实际上并不是&#34;字&#34;。您需要 array 字符来创建字符串。第二个问题是,即使您使用了一组字符,也无法使用+=
附加到数组。
您还必须记住C中的字符串是零终止的。因此,一个包含四个字符的字符串实际上包含五个字符,包括终止符'\0'
。在您的情况下,您需要一组size + 1
个字符。