你的意思是输入多余的字符吧?
1、因为你用scanf输入的字符都是输入到缓冲区中的,例如你定义了一个只接受一个字符的变量ch,但却输入了多余的字符,这种情况会给编译器造成困扰,因为他并不完全智能,通常采用这种方法释放掉缓冲区内多余的字符输入;例如:
2、charch;scanf("%c",&ch);//假如你不小心输入了多个字符//解决方法如下while(‘\n’!=getchar()){continue;}//这里的原理一不断的用getchar读取缓冲区内的字符,并将其废弃掉,直到遇到你输入的回车符(当然也可以是别的输入结束符);
从键盘输入一行字符,写入一个文件,再把该文件内容读出显示在屏幕上。#include
其实核心就是实现动态数组,无论字符串多长,都能够储存。
用getchar一个一个得到字符,直到文件结束。
int n=0,k=100; //初始化,字符串长度为0,字符串空间长度为100 char * s2 = NULL,s1 = (char *)malloc(100); //初始化字符串空间 if (s1 == NULL) return; //内存分配失败,返回 while((c=getchar())!=EOF){ //判断是否到文件结束,一个个读取字符 if(k<=n){ //当前字符串长度大于等于字符串空间长度时 k*=2; //长度增长2倍 s2 = (char *)realloc(s1,k); //重新分配内存 if(s2 == NULL){ //内存分配失败 free(s1); //释放已分配内存 return; }else{ //内存分配成功 s1=s2; } } s1[n++]=c; //字符串赋值字符 } s1[n]=0; //字符串末尾置为\0