scanf()函数只是从当前缓冲区取一个相应的字符;其中缓冲区的最后一个字符为'\n';
按你说的,可以用循环,接收字符同样可以用getchar()函数。
char
ch;
while(1){
scanf("%c",&ch);
if(ch=='\n')
break;
/
当输入回车时,结束
/
/
对ch做相应处理
/
}
用串S拷贝出另一个串T,对串T从头至尾扫描,对非数字字符原样写入串S,对于数字字符先写一个$符号再写该数字字符,最后,在S串尾加结束标志。使用此方法是牺牲空间,赢得时间。
#include <stdioh>int fun(char s)
{
char t[80];
int i, j;
for(i=0; s[i]; i++) /将串s拷贝至串t/
t[i]=s[i];
t[i]='\0';
for(i=0,j=0; t[i]; i++)
/对于数字字符先写一个$符号,再写该数字字符/
if(t[i]>='0' && t[i]<='9')
{
s[j++]='$';
s[j++]=t[i];
}
/对于非数字字符原样写入串s/
else
s[j++]=t[i];
s[j]='\0'; /在串s结尾加结束标志/
return 0;
}
int main()
{
char s[80];
printf ( "Enter a string:" );
scanf ("%s", s); /输入字符串/
fun(s);
printf ("The result: %s\n", s); /输出结果/
return 0;
}
#include <stdioh>
#include <stringh>
int Insert(char a[],char num,int a_i);
void main()
{
int a_i;
char a[50],num;
printf("请输入一个字符串:");
gets(a);
printf("请输入您想插入的一个字符:");
num=getchar();
getchar();
printf("请输入您想插入的位置:");
fflush(stdin);
scanf("%d",&a_i);
if (Insert(a,num,a_i))
printf("没有插入!\n");
else
printf("插入后的字符串为:%s\n",a);
system("pause");
}
/函数功能:在字符串的某个位置插入一个字符/
int Insert(char a[],char num,int a_i)
{
int i;
if(a_i >= strlen(a))
{
printf("您输入的位置超出字符串长度了!");
return -1;
}
else
{
for(i=strlen(a);i >= a_i;i--)
{
a[i+1]=a[i];
}
a[i]=num;
return 0;
}
}
要看你的空字符串是怎么存储的了,如果是char str[]="";这样的话,str的大小已经固定,就没法添加字符了。如果事先给字符数组预留了足够大的空间,就可以添加了。比如char str[10]="";str[0]='a';str[1]='\0';就可以了。或者strcat(str,"abc");这样也行。1通过fopen打开文件,fputs像文件写入数据,fclose关闭文件。
#include
int main()
{
file pf = fopen("f:/1txt", "w+"); // 以写、创建形式打开文件
if (!pf)
return -1;
fputs("123abc456-1452=!@#$", pf); // 像文件写入字符串
fclose(pf); // 关闭文件
printf("ok");
return 0;
}
2file
fopen(
const
char
fname,
const
char
mode
);
fopen()函数打开由fname(文件名)指定的文件,
并返回一个关联该文件的流如果发生错误,
fopen()返回null
mode(方式)是用于决定文件的用途(例如
用于输入,输出,等等)
mode(方式)
意义
"r"
打开一个用于读取的文本文件
"w"
创建一个用于写入的文本文件
"a"
附加到一个文本文件
"rb"
打开一个用于读取的二进制文件
"wb"
创建一个用于写入的二进制文件
"ab"
附加到一个二进制文件
"r+"
打开一个用于读/写的文本文件
"w+"
创建一个用于读/写的文本文件
"a+"
打开一个用于读/写的文本文件
"rb+"
打开一个用于读/写的二进制文件
"wb+"
创建一个用于读/写的二进制文件
"ab+"
打开一个用于读/写的二进制文件
3int
fputs(
const
char
str,
file
stream
);
fputs()函数把str(字符串)指向的字符写到给出的输出流
成功时返回非负值,
失败时返回eof
4int
fclose(
file
stream
);
函数fclose()关闭给出的文件流,
释放已关联到流的所有缓冲区
fclose()执行成功时返回0,否则返回eof这个是有关scanf的老生常谈了。
① 这个原理是基于标准C里面的whitespace的定义,空格、回车或换行符,制表符等被视为whitespace,而scanf中的格式“ %c”,已说明是按空格+字符来处理输入的。没有空格则格式中的空格被忽略, 如果有空格或回车换行,被当作空格对待。
② 这是技巧的出现,的确是因scanf的设计问题而应运而生的。scanf用的不好容易溢出; 一般认为应该避免使用它,用替代的方式如:while ((c = getchar()) != EOF && c != '\n');
③ 对“输入流”作fflush()不是标准的C方式, 意味着不同的编译器可能会有不同的结果,所以绝对应该避免。
直接看代码:
#include<stdioh>
#include<stringh>
void main()
{
char str[100],str_new[100],t;
char p=str;
int at=0;
puts("输入字符串:");
gets(str);
puts("要插入的字符:");
t=getchar();/输入的字符被存放在键盘缓冲区中直到按回车为止(回车字符也放在缓冲区中);其他字符会保留在键盘缓存区中,等待后续getchar调用读取/
fflush(stdin);//刷输入新缓存区的内容
puts("插入的位置:");
scanf("%d",&at);
if(at>strlen(str))
{
puts("输入长度应该小于字符串长度!");
return;
}
int j=0;
for(int i=0;str[i]!=0;i++)//新的字符串在这个for()生成
{
if(i==at-1)
str_new[j++]=t;
str_new[j++]=str[i];
}
str_new[j]='\0';
puts(str_new);
}
这里使用生成新数组的for循环较简洁,但是要新定义一个数组,有一定的系统开销,读者也可以用其它的方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)