您的代码有几个问题,而不仅仅是一个:
1.
您使用错误的格式说明符%c来捕获单个字符而不是%s捕获字符串:
char arr[23];
printf("Enter your name: \n");`
scanf("%c",&arr[i]);
宁可使用scanf("%s",arr);甚至更好的scanf("%Ns",arr);whereN代表要输入的最大字符数。请注意,以字符串结尾的空字符需要一个元素,因此它需要至少比char组成数组的字符少一个。
您还可以使用fgets(arr,23,stdin)which 首选从标准输入中使用字符串,因为它更安全,因为它要求您提供要读取的最大字符数(也计算空字符),并且还可以读取空格分隔的单词作为默认为字符串。
2.
i未初始化为任何值,因此:
scanf("%c",&arr[i]);
导致未定义的行为。
3.
此外,您尝试通过使用strlen()作为 for 循环的条件表达式的一部分来获取字符串长度:
for(int v = 0; v <= strlen(arr); v++)
尽管没有有效的字符串arr会导致未定义的行为。
作为旁注:strlen()在 for 循环之前只使用一次会更有效,将其返回值存储在适当类型的对象中(size_t是 的返回值的类型strlen())并在 for 的条件下使用该对象循环而不是strlen()在每次迭代之前执行。
4.
接下来是您尝试在 for 循环中打印未提供/初始化为的字符arr:
for(int v = 0; v <= strlen(arr); v++)
{
printf("%c",arr[v]);
}
5.
带有条件的 for 循环v <= strlen():
for(int v = 0; v <= strlen(arr); v++)
比预期多运行一次,并打印出多余的空字符,因为空字符不可打印。
而是使用v < strlen()或根据第 3 点:
size_t len = strlen(arr);
for(int v = 0; v < len; v++)
6.
的返回值main应该是int,不是void。
7.
调用后有一个尾随撇号printf():
printf("Enter your name: \n");`
而是使用:
#include <stdio.h>
int main()
{
char arr[23];
printf("Enter your name: \n");
scanf("%22s",arr);
printf("%s",arr);
}
在线示例
如果您想一次打印出整个输入的字符串,或者:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[23];
printf("Enter your name: \n");
scanf("%22s",arr);
size_t len = strlen(arr);
for(int v = 0; v < len; v++)
{
printf("%c",arr[v]);
}
}
在线示例
如果要单独打印每个字符。