从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输

从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以“!”结束.
我写的程序是
#include <stdio.h>
#include <stdlib.h>
void main ()
{
char str[100];
int i;
FILE*fp;
if((fp=fopen("test.c","w")==NULL) )
{
printf("Can not open the file\n");
exit(0);
}
printf("请输入一组字符串");
scanf("%s",str);
printf("\n");
for(i=0;i!='!';i++)
{
if(str[i]>='a'&&str[i]<='z')
{
str[i]=str[i]-('z'-'a');
fputc(str[i],fp);
getchar(str[i]);
}
fputc(str[i],fp);
getchar(str[i]);
}
fclose(fp);
}
哪里有不对的请指出
还有 对于读写文件 什么时候该用二进制 什么时候该用ASCII码 不是很清楚 希望有老师可以指点一下

"str[i]=str[i]-('z'-'a');"
上面这句话应该不对吧?小写字母全部转换成大写字母就是对应ASCII码减32,你这个'z'-'a'的值是25.
另外赞同楼上说的“还可以按照常识,比如操作文本文件都用ascii,对于二进制文件,用二进制。 ”但这不是绝对的,文本文件用ascii,主要是这些信息本来就是以自然文本的形式表达,你用记事本打开这些ASCII码存储的文本,一目了然知道了想要反应的信息。如果按照二进制的方式读写这些本来要用ASCII码表达的东西,用记事本打开就只能看到乱码。但并不是说以二进制操作就不能正确获取内容。用二进制操作文本文件通常比用ASCII方式生成的文件要小得多。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-02-01
#include<stdio.h>

void main()
{
char str[100];
FILE *p;
int i,len=0;
printf("输入一串英文字符:\n");
while((str[len]=getchar())!='!')
  {
  len++;
  }
for(i=0;i<len;i++)
  if(str[i]>='a'&&str[i]<='z')
    str[i]-=32;
p=fopen("c:\\test.txt","w");
fputs(str,p);
fclose(p);    
}

第2个回答  2014-07-02
#include <stdio.h>

void convert(char *str)
{
while (*str!='\0')
{
if (*str>='a' && *str<='z')
{
*str-=32;
}
*str++;
}
}

main()
{
FILE *fp;
char str[100];
fp = fopen("test.txt","w");
gets(str);
convert(str);
fputs(str,fp);
fclose(fp);
}
第3个回答  推荐于2017-12-16
什么时候用二进制,什么时候用ascii码,这个不好定论。
一方面根据你的需要,还可以按照常识,比如操作文本文件都用ascii,对于二进制文件,用二进制。本回答被网友采纳
相似回答