c语言中如果输入带空格的字符串有gets(s) 和scanf("%[^\n]",s)两种方式。如下程序:
#include<stdio.h>
#include<string.h>
int main()
{
int len=0,i=0,k=0;
char s[128];
//scanf("%[^\n]", s); //scanf输入带空格的字符串
gets(s); //gets(s)输入带空格的字符串
len = strlen(s);
i = len -1;
while(s[i] != ' ')
{
k++;
i--;
if(i == 0) break;
}
if(i == 0) k = len;
printf("%d\n",k);
return 1;
}
但输入单个字符时,由于scanf("%c",&c)和getchar(c)都会接受'\n'换行符,所以输入效果会出现偏差。我们可以先接受'\n'字符串再接受我们想要的。如下程序:
#include<stdio.h>
#include <stdlib.h>
int main()
{
int *N,*M,*OUT;
char str,str2;
int i,j,n,m,a,b,max,k=0;
scanf("%d %d",&n,&m);
N=(int *) malloc(n * sizeof(int));
M=(int *) malloc(m* sizeof(int));
OUT=(int *) malloc(m* sizeof(int));
for(i=0;i<n;i++)
{
scanf("%d",&N[i]);
}
for(i=0;i<m;i++)
{
//getchar();
//str = getchar();
fflush(stdin);
scanf("%c",&str);
scanf("%d",&a);
scanf("%d",&b);
if(str == 'Q')
{
max = N[a-1];
for(j=a;j<b;j++)
{
if(N[j] > max) max = N[j];
}
OUT[k++] = max;
}
if(str == 'U')
{
N[a-1]= b;
}
}
for(i=0;i<k;i++)
printf("%d\n",OUT[i]);
free(N);
free(M);
free(OUT);
return 1;
}
其中fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃。fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上 。我们既可以用fflush(stdin),也可以用getchar处理多余的‘\n’字符或者再多用一个scanf("%c",&str)等方法处理。