如何在C中输入2D数组?

如何在C中输入2D数组?,c,C,我一直在尝试制作一个程序,计算输入文本中的字符数,而不是空格数。我知道我必须使用2D数组,但是当我输入单词集时,我的循环只计算第一个单词中的字符 以下是主要代码: char text[400][40]; int charNum = 0; int i = 0; int j = 0; printf("input string: \n"); scanf("%s", &text); while(text[i] != '\0'){ while(text[i][j] != '\0'){

我一直在尝试制作一个程序,计算输入文本中的字符数,而不是空格数。我知道我必须使用2D数组,但是当我输入单词集时,我的循环只计算第一个单词中的字符

以下是主要代码:

char text[400][40];
int charNum = 0;
int i = 0;
int j = 0;


printf("input string: \n");
scanf("%s", &text);
while(text[i] != '\0'){
    while(text[i][j] != '\0'){
        printf("\n\nword: %s\n", text[i]);
        printf("\n\nchar:%c\n", text[i][j]);      
        charNum = charNum + j;
        j++;
        printf("J= %d\n", j);
    }
    i++;
}

如何输入2D数组,以便循环可以读取其中的每个字符串?

我看到您已声明将输入存储在char text[400][40]中;这意味着您可以存储400个单词,每个单词长度为40个字符。如果使用scanf输入单词,scanf将只接受输入,直到遇到第一个空格为止。因此,使用FGET阅读输入单词。 例子: 文本[0]=“john”; 文本[1]=“xyzxyz xyz”; 您可以使用fgets读取这两种格式。

您可以使用fgets读取输入字符串,并在每个空格处解析字符串

类似这样的方法可能会奏效:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUMWORDS 400
#define WORDLEN 40
#define BUFFSIZE 100

int
main(void) {
    char text[NUMWORDS][WORDLEN];
    char line[BUFFSIZE], *word;
    size_t slen, count = 0;
    int i;

    printf("Enter some words: ");
    if (fgets(line, BUFFSIZE, stdin) == NULL) {
        printf("Error reading into buffer.\n");
        exit(EXIT_FAILURE);
    }

    slen = strlen(line);
    if (slen > 0) {
        if (line[slen-1] == '\n') {
            line[slen-1] = '\0';
        } else {
            printf("Exceeded buffer length of %d.\n", BUFFSIZE);
            exit(EXIT_FAILURE);
        }
    }

    if (!*line) {
        printf("No words entered.\n");
        exit(EXIT_FAILURE);
    } 

    word = strtok(line, " ");
    while (word != NULL) {
        if (strlen(word) >= WORDLEN) {
            printf("\nYour word \"%s\" is longer than word size limit: %d\n", 
                      word,  WORDLEN);
            exit(EXIT_FAILURE);
        }
        strcpy(text[count], word);
        count++;
        word = strtok(NULL, " \n");
    }

    if (count > NUMWORDS) {
        printf("Too many words entered.\n");
        exit(EXIT_FAILURE);
    }

    printf("\nYour array of strings:\n");
    for (i = 0; i < count; i++) {
        printf("text[%d] = %s\n", i, text[i]);
    }

    return 0;
}
输出:

Your array of strings:
text[0] = sadsad
text[1] = asdasdasd
text[2] = asdasdasdasd

如果只想计算输入文本的字符数?我会这样做(if(*s!=32)是不计算空格,ASCII“space”=decimal 32):


只是因为scanf一直读到第一个空格。 你必须在这里使用gets。 这适用于不带空格的简单字符计数:

char str [100];
int i=0,cpt=0;
printf ("Enter some words: ");
gets (str);
While(str [i]!='\0'){
    if (str [i]!=' '){
        cpt++;
    }
    i++;
}

printf ("Size: %d",cpt);
首先是scanf(“%s”、&text);您正在使用的将不会读取任何空格。在名称中遇到第一个空格之前,它将为只读。使用scanf(“%[^/n]s”、&text);而是用空格来读名字。 您读取二维阵列的方式是错误的。简单的方法是使用for循环

例如:

for (i=0;i<n;i++)
{
   scanf ("%[^/n]s,text[i]);
}

for(i=0;iHint:
scanf(“%s”,&text);
完全错误。请检查数据类型。但不是每个字符串都声明为字符,并且在scanf中都有%s吗?可以找到可能的解决方案副本吗?您可以提供可能的输入吗?以及您希望从中获得什么输出。如果您甚至不显示,我们将无能为力。请编辑您的问题;不要尝试添加注释。尤其是那些无法设置格式的问题就像输入一样,fgets是有用的。但是fgets不是只用于从文件中获取一个字符串吗?“每个长度为40个字符。”,不,不完全正确,但仅限39个
char
s,因为C字符串还需要一个
char
来存储
0
终止。该文件也可以是stdin和stdout。它只查找文件指针,并且文件指针可以初始化为标准输入。切勿使用
get()
,它是邪恶的,不再是C语言的一部分。请使用
fgets()
char str [100];
int i=0,cpt=0;
printf ("Enter some words: ");
gets (str);
While(str [i]!='\0'){
    if (str [i]!=' '){
        cpt++;
    }
    i++;
}

printf ("Size: %d",cpt);
for (i=0;i<n;i++)
{
   scanf ("%[^/n]s,text[i]);
}