我是C编程新手....我们有二维的整数数组…但是如何声明和接受2D字符串数组的输入…我尝试过在类似于整数数组的时间内采取单个字符输入…但我想把整个字符串作为输入一次到2D数组..
代码:
#include <stdio.h>
int main()
{
char str[20][20];
int i, j;
for (i = 0; i < 20; i++)
{
for (j = 0; j < 20; j++)
{
scanf("%c", &str[i][j]);
}
}
}
谁能解决这个问题?
二维字符串数组的声明可以描述为:字符字符串[m] [n];其中m是行大小,n是列大小。如果你想用m个字符串作为输入,每次输入一个完整的字符串…内容如下
#include<stdio.h>
int main()
{
char str[20][20];
int i,j;
for(i=0;i<m;i++)
{
gets(str[i]);
}
}
这里的'i'是字符串....的索引希望这个答案能帮到你…
您的代码有几个问题。使用scanf
到达字符,您将读取换行符。如果我创建一个更精简的代码版本,用额外的几行来打印输入,我们可以看到:
#include <stdio.h>
int main() {
char str[3][3];
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
scanf("%c", &str[i][j]);
}
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%c ", str[i][j]);
}
printf("n");
}
}
并运行它:
$ ./a.out
gud
ghu
ert
g u d
g h
u
e
$
我们可以测试输入来规避这个问题。如果字符输入是换行字符('n'
),那么我们将减少j
,因此我们有效地将循环发送回一步。我们可以很容易地扩展这个布尔条件来忽略其他空白字符,如' '
或't'
。
#include <stdio.h>
int main() {
char str[3][3];
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
char temp = 0;
scanf("%c", &temp);
if (temp == 'n' || temp == ' ' || temp == 't') {
j--;
}
else {
str[i][j] = temp;
}
}
}
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%c ", str[i][j]);
}
printf("n");
}
}
现在,当我们运行这个:
$ ./a.out
gud
ghu
ert
g u d
g h u
e r t
$
当然,您应该做的另一件事是检查scanf
的返回值,这是一个表示已读条目数的int
。在这种情况下,如果它返回0
,我们就知道它没有读取任何内容。在这种情况下,在内循环中,我们可能还需要减少j
,以便循环继续。
#include<stdio.h>
main()
{
char name[5][25];
int i;
//Input String
for(i=0;i<5;i++)
{
printf("Enter a string %d: ",i+1);
}
//Displaying strings
printf("String in Array:n");
for(int i=0;i<5;i++)
puts(name[i]);
}
接受数组中的String的简单代码。