【问题标题】:Print new line to a text file without carriage return (CR) in windows在 Windows 中将新行打印到没有回车符 (CR) 的文本文件
【发布时间】:2016-01-14 10:32:49
【问题描述】:

我正在用 C 语言编写一个程序,它将一个随机的十六进制值打印到一个文本文件中。打印的值有一个回车符 (CR) 和一个换行符 (LF)。但是,使用该文件时,CR(在 notepad++ 中可见)会导致问题。有没有办法只用 LF 而没有 CR 打印一个新行。

这是代码:

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


void main(){
  int hexa_address, numberofAddress;
  char tracefile[50]; //name of file
  int seq_or_rand; //1 for random address; 2 for sequential address

  srand(time(NULL)); //reset the value of the random

  printf("This generator generates 32bits hexadecimal.\n\n");
  printf("Name of file: ");
  scanf("%s", tracefile);
  printf("Random (1) or Sequential (2): ");
  scanf("%d", &seq_or_rand);

  FILE *file;
  file = fopen(tracefile,"w"); // create file

  if(seq_or_rand == 1){ //random generator
    file = fopen(tracefile,"w"); // create file
    for(numberofAddress = 0; numberofAddress<10000;numberofAddress++){ //create 10000 address
        //if(numberofAddress!=0)

        fprintf(file, "0 ");
        int space = 0;

        for(space; space<8; space++){ //remove any 0 from the left
            hexa_address = rand() % 16;
            if(hexa_address != 0){
                fprintf(file,"%x", hexa_address);
                space++;
                break;
            }
            else if(hexa_address == 0 && space == 7){ //in condition of 00000000
                fprintf(file, "0");
                space++;
            }
        }

        for(space; space<8; space++){ //continue generating the remaining address
            hexa_address = rand() % 16;
            fprintf(file,"%x", hexa_address);
        }
        if(numberofAddress!=99999)
            fprintf(file,"\t"); //start a new line, but not on the last one
    }
  }
  else if(seq_or_rand == 2){ //sequential generator
    file = fopen(tracefile,"w"); // create file
    for(numberofAddress = 0; numberofAddress<10000;numberofAddress++){ //create 10000 address
        if(numberofAddress!=0)
            fprintf(file,"\n"); //start a new line, but not on the first one
        fprintf(file,"0 ");
        fprintf(file,"%x", numberofAddress*4);

    }
  }

  else{ //invalid input
      printf("Invalid Input");
      exit(1);
      }

    fclose(file); //done
}

【问题讨论】:

    标签: c printf ansi


    【解决方案1】:

    以二进制模式打开/创建文件

    file = fopen(tracefile, "wb");
                              ^ Binary mode
    

    否则

    fprintf(file,"\n"); /* In text mode this appends two characters. */
    

    【讨论】:

    • @user968623 这将打开文件,如果文件不存在,则创建一个新文件。
    • 非常感谢。我花了很长时间才注意到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2011-06-11
    • 2011-07-10
    相关资源
    最近更新 更多