0

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

为什么 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'

提前感谢您的帮助。

4

2 回答 2

1

因为当你到达这里

scanf("%d", &str_length);

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

fflush (stdin);

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

str[str_length] = '\0';
于 2013-07-15T08:09:02.857 回答
0

在获得线路长度后,您似乎没有消耗 \n

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

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

于 2013-07-15T07:52:04.360 回答