如何在C中输入2D数组?
我一直在尝试制作一个程序,计算输入文本中的字符数,而不是空格数。我知道我必须使用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'){
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]);
}