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

时间:2016-12-15 04:36:16

标签: c

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

这是主要代码:

<input type="text" id="searchBox" placeholder="Search" onChange={this.filterList}/>

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用fgets来读取输入字符串,使用strtok来解析每个空格处的字符串。

这样的事情可行:

#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;
}

输入:

Enter some words: sadsad asdasdasd asdasdasdasd

输出:

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

答案 2 :(得分:0)

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

int main()
{
    int size = 0;
    char input[200] = "This is an input string";
    size = mystrlen(input);
    printf("size=%d", str);
    return 0

}

int mystrlen(char *s)
{
    int i = 0;
    while (*s++) {
        if (*s != 32)
            i++;
    }
    return i;
}
output: size = 19;

答案 3 :(得分:0)

只是因为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);

答案 4 :(得分:0)

首先是scanf(&#34;%s&#34;,&amp; text);你正在使用不会读取任何空格。它只会读取,直到名称中遇到第一个空格。使用scanf(&#34;%[^ / n] s&#34;,&amp; text);而是用空格读取名称。 你正在阅读2D数组的方式是错误的。简单的方法是使用for循环。

示例:

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