字符数组使用

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.