在插入文本之前,fputc将第一行留空

时间:2016-12-28 17:27:05

标签: c++ file

我使用getchar()和循环来获取文本并使用fputc()放入文本文件中,但写入后它总是在文本文件中留空第一行。当字符输入为点(。)时,循环停止。如何删除第一行?

更新(2016年12月29日):我使用了DevC ++并且代码运行良好而没有创建空白,但我的VisualStudio2015出现了问题。

示例:创建名为test.txt的文件

输入:这是一个文本。

输出:(在文本文件中)

  

[空行]

     

这是一个文本

void writeFile(char *fileName){
    FILE *fp;
    fp = fopen(fileName, "wt"); //write text
    if (fp == NULL) {
        cout << "Failed to open" << endl;
        fclose(fp);
    }
    else {
        int i = 0;
        char c = '\0';        
        cout << "Enter a text and end with dot (.): ";
        fflush(stdin);
        //c = getchar();
        while (c != '.') {
            fputc(c, fp);
            c = getchar();
        }
        cout << "Written successfully" << endl;
        fclose(fp);
    }
}

2 个答案:

答案 0 :(得分:1)

出于好奇,有没有C功能的原因?在C ++中做这样的事情更适合使用流,比如:

library(data.table)
setDT(df)

df[, lapply(.SD, function(x) length(unique((x * Species)[!is.na(x)]))),
  .SDcols=X1983:X2013, by=lot]
   lot X1983 X1988 X2003 X2008 X2013
1:   1     1     2     2     2     2
2:   2     2     2     2     1     1
3:   3     2     2     2     2     0

或者,或者:

#include <iostream>
#include <fstream>

using namespace std;

void writeFile(const char *fileName)
{
    ofstream writeToFile;
    writeToFile.open(fileName);
    if (!writeToFile.is_open()) {
        cout << "Failed to open" << endl;
        return;
    } else {
        string stringToWrite{""};
        char c = '\0';        
        cout << "Enter a text and end with dot (.): ";
        while (c != '.') {
            std::cin >> c;
            stringToWrite += c;
        }
        writeToFile << stringToWrite << endl;
        cout << "Written successfully" << endl;
        writeToFile.close();
    }
}

int main()
{
    const char *fileName="test.txt";
    writeFile(fileName);
    return 0;
}

答案 1 :(得分:0)

第一遍c为0,因此为空行。

将while循环更改为

  while( (c = getchar()) != EOF)
   {
       if(c == '.')
         break;
   }

看起来有点奇怪,但在C语言中从流中读取字符是惯用的。