嗨我有一个关于将数据输入到数组
的问题为什么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'
。
提前感谢您的帮助。
答案 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并将其丢弃。