Arrays scanf将换行符存储为数组的第一个元素

Arrays scanf将换行符存储为数组的第一个元素,arrays,newline,scanf,Arrays,Newline,Scanf,嗨,我有一个关于将数据输入数组的问题 为什么scanf将'\n'存储到此代码中数组的第一个元素中 #include <stdio.h> #include <stdlib.h> #define MAX 10 int main (void) { // Global declarations int str_length; char str[MAX]; int count; char temp; // St

嗨,我有一个关于将数据输入数组的问题

为什么scanf将
'\n'
存储到此代码中数组的第一个元素中

#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int main (void)
{
    // Global declarations
       int str_length;
       char str[MAX];
       int count;
       char temp;
    // Statements

       // prompt user for string length
       printf("Enter string length: ");
       scanf("%d", &str_length);

       printf("Enter string: ");
       // input string
       for(count = 0; count < str_length; count++)
       {
            scanf("%c", &str[count]);
            printf("%c", str[count]);
       }

       for(count = 0; count < str_length; count++)
       {    
            temp = str[0]; // set temp to the first element
            str[count] = str[count+1]; // set the next element to be the first element
            str[str_length-1] = temp;  // swap the first element and the last element
            puts(str);
       }


    system("PAUSE");
    return 0;
}
#包括
#包括
#定义最大值10
内部主(空)
{
//全球宣言
int str_长度;
字符str[MAX];
整数计数;
焦炭温度;
//声明
//提示用户输入字符串长度
printf(“输入字符串长度:”);
scanf(“%d”和str_长度);
printf(“输入字符串:”);
//输入字符串
对于(计数=0;计数
当我在数组中输入
1234567890
而不是1作为第一个元素时,第一个元素是换行符
'\n'


提前感谢您的帮助。

在获得行的长度后,您似乎没有使用\n

  // prompt user for string length
   printf("Enter string length: ");
   scanf("%d", &str_length);

您需要做的就是在这一行之后添加一个%c扫描并丢弃它。

因为当您到达这里时

scanf("%d", &str_length);
用户键入类似4的内容,然后输入enter,缓冲区中填充了
4\n
。 4转到
str\u length
,而
\n
停留在缓冲区。 因此,您需要清理缓冲区,只需添加:

fflush (stdin);
注意当declear
char str[MAX]
并且用户在其中输入char时,您需要在字符串末尾添加null terminator。 加上

str[str_length] = '\0';

您所说的消费是什么意思\n?您能详细解释一下吗?因为我真的想知道printf没有被使用的原因。非常感谢stdin中的扫描读取,您正在输入一个数字,后跟\n。%d的scanf将不会使用尾随\n。你需要把它吃掉然后扔掉。