int n;
char string[20][100];
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int count=0;
getchar();
scanf("%[^\n]", string[i]);
for (int j = 0; j < strlen(string[i]); j++)
{
if ((string[i][j] <= 'z'&&string[i][j] >= 'a') || (string[i][j] <= 'Z'&&string[i][j] >= 'A') || string[i][j] == ' ')
{
if ((string[i][j] == ' '&&string[i][j + 1] != ' ') || (string[i][j] != ' '&&string[i][j + 1] == '\0'))
count++;
}
else return 0;
}
printf("%d\n", count);
}
return 0;
在上述代码中scanf("%[^\n]",str)这句话的作用是碰见了回车就退出然后把缓冲区里面的内容按字符串格式输入str中,然后回车还留在缓冲区里。所以当使用for循环对string进行赋值时必须加入getchar()吃掉上一个回车,不然就会出错。