回 帖 发 新 帖 刷新版面

主题:求助:乱码又见乱码

好郁闷啊,为什么我一碰到字符有关的编程就会遇上乱码,求大侠指点!

从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符串以“!”结束。  
以下是我写的代码,乱码见图片:

[code=c]
#include <stdio.h> 
#include<stdlib.h> 
void main()  
{  
    FILE *fp;  
     char str[100];  
     int i=0;  
     if((fp=fopen("test","w"))==NULL)  
    {
         printf("Can not open the file\n");  
         exit(0);  
    }  
    printf("Input a string:\n");  
    gets(str);  
    while(str[i]!='!')  
      {if (str[i]>='a'&&str[i]<='z')  
             str[i]=str[i-32];  
             fputc(str[i],fp);  
            i++;  
    }  
     fclose(fp);  
     fp=fopen("test","r");  
     fgets(str,sizeof(str)+1,fp);  
     printf("%s\n",str);  
     fclose(fp);  
}  [/code]

回复列表 (共6个回复)

沙发

最后少fputc了一个'\0'

板凳

烫烫……
太爽了

建议:跟着一楼走,吃肉吃到呕

3 楼

那该怎么改正呢?麻烦添个注释,我学c还没多久,对指针、内存那些东西还不是很熟悉啊

4 楼

每次使用缓冲区前把它清零。

5 楼

[code=c]
#include <stdio.h> 
#include<stdlib.h> 
int main(void)  
{  
    FILE *fp;  
    char str[100];  
    int i=0;  
    if((fp=fopen("test","w"))==NULL)  
    {
         printf("Can not open the file\n");  
         exit(0);  
    }  
    printf("Input a string:\n");  
    gets(str);  
    while(str[i]!='!')  
    {
        if(str[i]>='a'&&str[i]<='z')  
            str[i]=str[i]-32; // str[i]=str[i-32]; 不是下标减32 
        fputc(str[i],fp);  
        i++;  
    }
    fclose(fp);  
    fp=fopen("test","r");  
    fgets(str,sizeof(str)+1,fp);  
    printf("%s\n",str);  
    fclose(fp);  

    return 0;
}[/code]

6 楼

肯定是你输出的那个字符串没有'\0',这个问题很常见的,记住这个异常以后再出现就好找原因了

我来回复

您尚未登录,请登录后再回复。点此登录或注册