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

时间:2013-07-15 07:48:58

标签: 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;
    // 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;
}

当我将1234567890输入数组而不是1作为第一个元素时,第一个元素是换行符'\n'

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

因为当你到达这里时

scanf("%d", &str_length);

并且用户输入类似4的内容,然后输入,您的缓冲区填充4\n。 4转到str_length\n停留在缓冲区。 所以你需要清理缓冲区,只需添加:

fflush (stdin);

注意当declear char str[MAX]并且用户在其中输入char时,您需要在字符串末尾添加null终止符。 只需添加

str[str_length] = '\0';

答案 1 :(得分:0)

在获取行上的长度之后,您似乎没有消耗\ n

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

您需要做的就是在此行之后添加%c的scanf并将其丢弃。