字符数组使用
Character Arrays using
我想使用 scanf_s("%c\n", &arr[index])
在一行中使用 for
/while
循环一次输入一个字符。我不知道如何输出结果。下面是代码。(我只想使用 scanf
语句。fgets
方法很简单。
printf("\nEnter the lowercase letters\n");
for (index = 0; index < size; index++)
{
scanf_s("%c\n", &arr[index]);
_getch();
}
printf("\nThanks");
for (index = 0; index < size; ++index)
{
printf("%c/n", arr[index]);
}
它接受输入但在 thanks 语句后退出。我不知道为什么。尽管我使用了另一种有效的方法。这只是我尝试的一种变体。
改变
scanf_s("%c\n", &arr[index]);
_getch();
到
scanf_s(" %c", &arr[index], 1);
当使用 scanf_s
扫描字符 (%c
) 或字符串 (%s
) 时,您必须提供一个附加值作为参数,指示要扫描的字符数量.
%c
之前的 space 丢弃所有白色 space 字符(换行符、spaces 等),包括扫描非白色 space 字符之前的 none .
此外,循环中的 printf
有 /n
而不是 \n
作为换行符。
这段代码可能会更好:
int nchars;
printf("\nEnter the lowercase letters\n");
for (index = 0; index < size; index++)
{
if (scanf_s("%c", &arr[index], 1) != 1)
break;
}
printf("\nThanks\n");
nchars = index; // Do not report on values that were not entered
for (index = 0; index < nchars; ++index)
{
printf("%c\n", arr[index]);
}
请注意,当您使用 scanf_s()
和 %c
格式(以及 %s
和 %[…]
格式)时,它需要一个长度以及指向数据存储位置(一个转换规范的两个参数)。这告诉函数有多少 space 可用于存储该值。通常,长度不会是 1;您将使用 scanf_s("%s", buffer, sizeof(buffer))
来读取字符串。
最好在每次使用时检查 scanf_s()
的 return 值,这样您就知道它是否有效。
您可以添加额外的条件来打破循环,例如代码读取换行符。
我还注意到评论中的一些问题——这些问题已在上面的代码中修复。
- Why are you using
_getch()
when you're also scanning with scanf_s()
? That's going to confuse the poor user who types abcd
and sees only ac
. The _getch()
is eating the b
and d
.
- Also, newline is
\n
not /n
— the third printf()
has that as a typo.
- Using
\n
at the end of an interactive input format string is a bad idea; the user has to type something that's not a white space character after the input to get the scanf_s()
to return.
我想使用 scanf_s("%c\n", &arr[index])
在一行中使用 for
/while
循环一次输入一个字符。我不知道如何输出结果。下面是代码。(我只想使用 scanf
语句。fgets
方法很简单。
printf("\nEnter the lowercase letters\n");
for (index = 0; index < size; index++)
{
scanf_s("%c\n", &arr[index]);
_getch();
}
printf("\nThanks");
for (index = 0; index < size; ++index)
{
printf("%c/n", arr[index]);
}
它接受输入但在 thanks 语句后退出。我不知道为什么。尽管我使用了另一种有效的方法。这只是我尝试的一种变体。
改变
scanf_s("%c\n", &arr[index]);
_getch();
到
scanf_s(" %c", &arr[index], 1);
当使用 scanf_s
扫描字符 (%c
) 或字符串 (%s
) 时,您必须提供一个附加值作为参数,指示要扫描的字符数量.
%c
之前的 space 丢弃所有白色 space 字符(换行符、spaces 等),包括扫描非白色 space 字符之前的 none .
此外,循环中的 printf
有 /n
而不是 \n
作为换行符。
这段代码可能会更好:
int nchars;
printf("\nEnter the lowercase letters\n");
for (index = 0; index < size; index++)
{
if (scanf_s("%c", &arr[index], 1) != 1)
break;
}
printf("\nThanks\n");
nchars = index; // Do not report on values that were not entered
for (index = 0; index < nchars; ++index)
{
printf("%c\n", arr[index]);
}
请注意,当您使用 scanf_s()
和 %c
格式(以及 %s
和 %[…]
格式)时,它需要一个长度以及指向数据存储位置(一个转换规范的两个参数)。这告诉函数有多少 space 可用于存储该值。通常,长度不会是 1;您将使用 scanf_s("%s", buffer, sizeof(buffer))
来读取字符串。
最好在每次使用时检查 scanf_s()
的 return 值,这样您就知道它是否有效。
您可以添加额外的条件来打破循环,例如代码读取换行符。
我还注意到评论中的一些问题——这些问题已在上面的代码中修复。
- Why are you using
_getch()
when you're also scanning withscanf_s()
? That's going to confuse the poor user who typesabcd
and sees onlyac
. The_getch()
is eating theb
andd
.- Also, newline is
\n
not/n
— the thirdprintf()
has that as a typo.- Using
\n
at the end of an interactive input format string is a bad idea; the user has to type something that's not a white space character after the input to get thescanf_s()
to return.