函数fun的功能:将S所指字符串中下标为偶数的字符删除,剩余字符形成的新串放在t所指数组中
#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){inti,j=0;for(i=1;s[i]!='\0...
#include <stdio.h>
#include <string.h>
void fun(char *s, char t[])
{
int i,j=0;
for(i=1;s[i]!='\0';i+=2)
t[j++]=s[i];
t[j]='\0';
}
main()
{
char s[100], t[100];
void NONO ( );
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
}
void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[100], t[100] ;
FILE *rf, *wf ;
int i ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%s", s) ;
fun(s, t) ;
fprintf(wf, "%s\n", t) ;
}
fclose(rf) ;
fclose(wf) ;
}
这个fun编的哪不对啊?!谢谢!! 展开
#include <string.h>
void fun(char *s, char t[])
{
int i,j=0;
for(i=1;s[i]!='\0';i+=2)
t[j++]=s[i];
t[j]='\0';
}
main()
{
char s[100], t[100];
void NONO ( );
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
}
void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[100], t[100] ;
FILE *rf, *wf ;
int i ;
rf = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%s", s) ;
fun(s, t) ;
fprintf(wf, "%s\n", t) ;
}
fclose(rf) ;
fclose(wf) ;
}
这个fun编的哪不对啊?!谢谢!! 展开
3个回答
展开全部
这个函数基本没问题,主要注意如下几点:
1. 程序运行崩溃,是因为你没有“in.dat”文件可读;
2.输出到屏幕上和文件中的字符串出现乱码,是因为你的变量没有初始化,改为一下即可:
char s[100]={0}, t[100]={0} ;
1. 程序运行崩溃,是因为你没有“in.dat”文件可读;
2.输出到屏幕上和文件中的字符串出现乱码,是因为你的变量没有初始化,改为一下即可:
char s[100]={0}, t[100]={0} ;
更多追问追答
追问
这是二级模拟上机的编程,这个fun在out文件夹中输出不对,for那改成i<s字符串的长度就对,我就不道我这个为啥不对呢?谢谢!
追答
修改为小于字符串的长度,是因为你每次循环变量是+2的,如果不加控制,很容易造成数组的越界。
展开全部
用 s[i]!='\0' 来判断数组是否越界是不可靠的,因为你的 i 每次加2, 很有可能导致在字符串长度内满足不了 s[i] != '\0' 的条件. 举个例子,比如你的字符串是 s[] = "Hello!\0", 那么 s[1], s[3], s[5] 都不等于 '\0',下一次循环 i+=2,s[7]就已经越界了。
比较好的做法是用字符串的长度进行判断 i < strlen(s)
比较好的做法是用字符串的长度进行判断 i < strlen(s)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-03-23
展开全部
lovers
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询