先来复习一个简单单词吧:
flush(注意只有一个f):冲洗,冲刷,冲掉。 例句:I flushed the toilet and went back to work again.
下面,我们来看看一个简单的函数:fflush(file flush,注意有两个f), 先来看一个简单的程序:
#include <stdio.h>
int main()
{
char c;
scanf("%c", &c);
printf("%d\n", c);
scanf("%c", &c);
printf("%d\n", c);
return 0;
}
运行这个程序,输入1, 并按enter键,结果为:
49
10
不用吃惊,这个结果很正常的,字符1对应的ASCII值刚好为49, enter键对应的ASCII值为10, 所以就有这样的结果呢。可以看出,第二个scanf函数执行了,并从缓冲区中得到了值(其实,这个值不是我们想要的),那么我们如何把缓冲区这个“马桶”里面的值冲掉呢?用fflush函数就可以了。如下:
#include <stdio.h>
int main()
{
char c;
scanf("%c", &c);
printf("%d\n", c);//ASCII值刚好为49
fflush(stdin); // 冲掉“马桶”中的无用值
scanf("%c", &c);
printf("%d\n", c);
return 0;
}
字符串的删除小练习:由于char ch;当输入字符串为:"adg" 输入删除的字符为:"ad"时, 输出结果为:"dg"只删除了"a" 为什么呢?
#include <stdio.h>
void delete_letter(char str[], char newstr[],char ch);
int main(int argc, char *argv[])
{
char str[100];
char ch;
char newstr[100];
printf("请输入字符串: ");
fflush(stdin);//冲掉“马桶”中的无用值
scanf("%s", str);
printf("请输入要删除的字符: ");
fflush(stdin);
scanf("%c", &ch);
delete_letter(str,newstr,ch); //调用函数
puts(newstr);//输出删除字符后的新串printf("%s\n",newstr);
return 0;
}
void delete_letter(char str[], char newstr[],char ch)
{
int i=0,j=0;
while (str[i]!='\0')
{
if(str[i]==ch)
{
i++;
continue;
}
newstr[j++]=str[i++];
newstr[j]='\0';//标记字符串结束;等价于newstr[j]=0;
}
}
输出字符串中的空格:
#include <iostream>
using namespace std;
void deleteAllSpace(char str[])
{
char *p = str;
int k = 0;
while('\0' != *p)
{
if(' ' != *p)
{
str[k++] = *p++;
}
else
{
p++;
}
}
str[k] = '\0';
}
int main()
{
char str[6][20] =
{
"abc",
" abc",
"abc ",
" a b c ",
" a b c ",
" a bcd e "
};
int i;
for(i = 0; i < 6; i++)
{
deleteAllSpace(str[i]);
printf("%s\n", str[i]);
}
return 0;
}
输出非字母与非数字:
#include<stdio.h>
//#include<string.h>
#include<malloc.h>
char delete_latter(char *str1, char *str2);
char get_number(char *str1,char *str2);
int main (int argc,char*argv[])
{
char *str1=NULL;
char *str2=NULL;
str1=(char*)malloc(20*sizeof(char));
str2=(char*)malloc(20*sizeof(char));
printf("请输入字符串:\n");
gets(str1);
delete_latter(str1,str2);
printf("输出删除字母后的新字符串:\n");
puts(str2);
get_number(str1,str2);
printf("输出数字的新字符串:\n");
puts(str2);
return 0;
}
char delete_latter(char *str1,char *str2)
{
while (*str1!='\0')
{
if(!((*str1>='a'&&*str1<='z')//!(输出非字母)
||(*str1>='A'&&*str1<='Z')))
{
*str2=*str1;
str2++;
}
str1++;
}
*str2='\0';
return 0;
}
char get_number(char *str1,char *str2)//char str1[],char str2[]
{
//int i=0;
//int j=0;
while(*str1!='\0')//str1[i]!='\n'
{
if(*str1>='0'&&*str1<='9')//输出数字
{
*str2=*str1;//str2[j]=str1[i]
str2++; //j++
}
str1++; //i++
}
*str2='\0'; //str2[j]='\n'
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define N 1024
int main(int argc, char *argv[])
{
int i,j;
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12};
int*p = NULL;
int *pt[3] = {NULL};
for(i = 0; i < 3; i++)
{
pt[i] = a[i]; //ʲôӢ˼
}
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
printf("%-4d", a[i][j]);
}
printf("\n");
}
//printf("pt[0]=%p pt[1]=%p pt[2]=%p\n", pt[0], pt[1], pt[2]);
return 0;
}
void output(int a[][4], int n)
{
}
#include <stdio.h>
int getlength(char *str);
int findsite(char *str, char ch);
int main()
{
char str[100];
char *p = str;//*p=str
char ch;
printf("请输入字符串: ");
gets(str);
printf("字符串长度为:%d\n", getlength(str));
printf("请输入查找的字符: ");
scanf("%c", &ch);
printf("字符%c在字符串%s的位置为%d\n", ch, str, findsite(str, ch));
}
int getlength(char *str)
{
int i = 0;
while(*(str+i) != '\0')
i++;
return i;
}
int findsite(char *str, char ch)//str[]变*str
{
int i = 0;
while(*(str+i) != ch)//str[i]变*(str+i)
{
if(*(str+i) == '\0')
return 0;
i++;
}
return i+1;
}
#include <stdio.h>
//#define N 100
/*int getlength(char str[100])
{
int i = 0;
while(str[i] != '\0')
i++;
return i;
}*/
int getlength(char *str)
{
int i=0 ;
while(*(str+i) != '\0')
i++;
return i;
}
void show (char str[100])
{
char *p;
p=str;
for (p=str;*p!='\0';p++)
if (*p>='a' && *p<='z')
*p=*p-32;
else if
(*p>='A' && *p<='Z')
*p=*p+32;
}
int main(int argc,char *argv[] )
{
char str[100];
gets(str);
printf("字符串长度为%d\n", getlength(str));//
show(str);
puts(str);
return 0;
}