嗨,我是一个很新的编程,我需要一些小的帮助将char数组转换为字符串,我不知道哪里出错了。我需要在%c中输入用户输入并输入第一个输入 - aabcc然后单击enter 第二个输入 - fsdff然后再次输入 第三个输入 - 重新输入然后再次输入 第四个输入 - zzxcc并再次输入 最后一次输入 - asdfg。
但输出给出了数组1 = aabcc,第2个数组= fsdf(其中一个丢失了)第3个数组= f'\ n'...其次是第3个第4个和第5个数组显示不正确。谢谢所有先进的人。
int main()
{
int i, j;
char ch[5][6];
char c[5][5];
for (i = 0; i < 5; i++)
for (j = 0; j<5; j++)
scanf("%c", &c[i][j]); // get user input
memcpy(ch[0], c[0], 5);
ch[0][5] = '\0';
memcpy(ch[1], c[1], 5);
ch[1][5] = '\0';
memcpy(ch[2], c[2], 5);
ch[2][5] = '\0';
memcpy(ch[3], c[3], 5);
ch[3][5] = '\0';
memcpy(ch[4], c[4], 5);
ch[4][5] = '\0';
printf("array 1 = %s, array 2 = %s , array 3 = %s , array 4 = %s , array 5 = %s ", ch[0], ch[1], ch[2], ch[3], ch[4]);
}
答案 0 :(得分:1)
更改scanf
scanf("%c", &c[i][j]);
到
scanf(" %c", &c[i][j]);
^
|
space here
背后的原因是,您输入的输入为aabcc<Enter>
,输入缓冲区中有6
个字符。 scanf("%c")
读取a,a,b,c然后c,将它们解释为aabcc
,但换行符仍在输入缓冲区中。这就是为什么当你尝试打印换行时你也会看到换行符。
答案 1 :(得分:1)
您的scanf缓冲区(c [] [])太小,无法容纳单个条目中的所有字符。正如另一位作者指出的那样,你没有在静态分配中为'\ n'字符添加空格。
scanf字符数组(c [] [])的大小应为= max no。单词x(单词中最大字数+ 1)
加号是换行符。
#define MAXWORDSIZE 5
#define MAXWORDS 10
char c[MAXWORDS][MAXWORDSIZE + 1]; // Newline character
char ch[MAXWORDS][MAXWORDSIZE + 1 + 1]; // Newline and NUL character