打印一个字符数组
Printing a char array
我想知道我的代码有什么问题。我通常使用 scanf,但正在尝试掌握 fgets 的窍门。但是当我尝试打印一个 char 数组时,数组的每个元素都在单独的一行上,但即使我将数组的限制定义为任意大的数字,它也只有十一行的限制。我是一名初级程序员,所以尽量简单。
#include <stdio.h>
#define max_line 4096
int main(void) {
char str[max_line];
printf("Enter string: ");
fgets(str, max_line, stdin);
for (int i=0;i <max_line && i!='\n'; i++) {
printf("%c\n", str[i]);
}
return 0;
}
我想要这样的结果。
Enter string: Hello
H
e
l
l
o
但结果完全不同
Enter string: Hello
H
e
l
l
o
/n //Sorry, I don't know how to add new lines in Whosebug, but I think you get the idea.
/n
/n
/n
/n
试试这个代码
int main(void) {
int i;
char str[max_line];
memset(str, 0x0, max_line);
printf("Enter string: ");
fgets(str, max_line, stdin);
for (i=0;i < strlen(str) ; i++) {
printf("\n%c", str[i]);
}
return 0;
}
最后(在 Hello 之后),空字符不存在,因此是垃圾输出。
您需要检查 str[i]
不等于 到 '\n'
而不是检查 i!='\n'
。
正如@BLUEPIXY 所指出的,这意味着 i != 10,在 ASCII 代码中,'\n' 等于 10。
所以把条件改成:
for (int i=0;i <max_line && str[i]!='\n'; i++) {
我想知道我的代码有什么问题。我通常使用 scanf,但正在尝试掌握 fgets 的窍门。但是当我尝试打印一个 char 数组时,数组的每个元素都在单独的一行上,但即使我将数组的限制定义为任意大的数字,它也只有十一行的限制。我是一名初级程序员,所以尽量简单。
#include <stdio.h>
#define max_line 4096
int main(void) {
char str[max_line];
printf("Enter string: ");
fgets(str, max_line, stdin);
for (int i=0;i <max_line && i!='\n'; i++) {
printf("%c\n", str[i]);
}
return 0;
}
我想要这样的结果。
Enter string: Hello
H
e
l
l
o
但结果完全不同
Enter string: Hello
H
e
l
l
o
/n //Sorry, I don't know how to add new lines in Whosebug, but I think you get the idea.
/n
/n
/n
/n
试试这个代码
int main(void) {
int i;
char str[max_line];
memset(str, 0x0, max_line);
printf("Enter string: ");
fgets(str, max_line, stdin);
for (i=0;i < strlen(str) ; i++) {
printf("\n%c", str[i]);
}
return 0;
}
最后(在 Hello 之后),空字符不存在,因此是垃圾输出。
您需要检查 str[i]
不等于 到 '\n'
而不是检查 i!='\n'
。
正如@BLUEPIXY 所指出的,这意味着 i != 10,在 ASCII 代码中,'\n' 等于 10。
所以把条件改成:
for (int i=0;i <max_line && str[i]!='\n'; i++) {