打开新文件

时间:2017-05-10 19:39:42

标签: c file

我尝试将所有随机小写字母更改为此程序中的大写字母。首先,我已经在lowercase.txt AkfsASlkALfdk 中初始化。然后我从中读取并将所有小写字母更改为资本ones.The问题是,当我打开的 capital.txt ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌAKFSASLKALFDK。凡没有从来到这个错误吗?我找不到它仍然和我决定问你。

#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <math.h>
#include <conio.h>
int main() 
{
    int i;
    char s[100];
    char k[100];
FILE *kp;
kp = fopen("lowercase.txt", "r");
if (kp == NULL)
{
    printf("Error in opening file.\n");
    system("pause");
    exit(1);
}
FILE *temp;
temp = fopen("capital.txt", "w");
if (kp == NULL)
{
    printf("Error in opening file.\n");
    system("pause");
    exit(2);
}
    printf("Opening file is successful.\n");


    if (fscanf(kp, "%s", &s) != EOF)
    {
    for (i = 0; i < 100; i++)
        {
        if (s[i] >= 97 && s[i] <= 122)
            {
            s[i] -= 32;

            }
        }
    }
fprintf(temp, "%s", k);
getch();
return 0;
}

2 个答案:

答案 0 :(得分:1)

代码中的多个问题共同导致问题

  1. 您正在将已打开的FILE *存储在temp中,但检查kp。我想那是因为你复制粘贴上面的支票。可以通过更改变量
  2. 轻松修复
  3. 您在scanf设置的范围之外执行大小写操作。根据@MOehm的建议,将循环条件更改为s[i]
  4. 最后你要在s中转换字符串,但是在文件中保存k。 k永远不会被修改。将fprintf(temp, "%s", k);更改为fprintf(temp, "%s", s);

答案 1 :(得分:0)

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char *append(const char *s, char c) {
    int len = strlen(s);
    char buf[len+2];
    strcpy(buf, s);
    buf[len] = c;
    buf[len + 1] = 0;
    return strdup(buf);
}

int main(int argc, char **argv)
{
    char ch;
    FILE *fp;

    if (argc != 2)
      return (0);

    if ((fp = fopen(argv[1], "r")) == NULL)
    {
      perror("Error while opening the file.\n");
      exit(EXIT_FAILURE);
    }

    char *res;
    while((ch = fgetc(fp)) != EOF)
    {
      res = append(res, ch);
    }

    fclose(fp);

    int i = 0;
    while (i < strlen(res))
    {
      if (res[i] >= 97 && res[i] <= 122)
        res[i] = res[i] - 32;
      i++;
    }

    printf("%s\n", res);
    return 0;
}

这是一个简单的例子

通过char读取文件char并将每个char添加到char *中。然后为每个字符小写字符char,sub 32获取大写字符并写入然后打印。启动程序时将文件名作为第一个参数