C 第一个单词后面的第一个字母不见了

C 第一个单词后面的第一个字母不见了,c,gets,puts,fputs,C,Gets,Puts,Fputs,我对编程相当陌生,在学校也做过一些,但他们只教一些基本的函数,比如printf、scanf,比如指针。我正在制作一个小程序,将用户输入打印到文件中,但是当文本写入文件时,第一个单词后的第一个字母丢失了,我不知道为什么。有人能解释一下第一个字母的情况吗?如果可以的话,请用简单的方式解释一下,谢谢你的回答 这是我用来写入文件的函数 void text(){ int e=1; puts("After a sentance press enter to continue

我对编程相当陌生,在学校也做过一些,但他们只教一些基本的函数,比如printf、scanf,比如指针。我正在制作一个小程序,将用户输入打印到文件中,但是当文本写入文件时,第一个单词后的第一个字母丢失了,我不知道为什么。有人能解释一下第一个字母的情况吗?如果可以的话,请用简单的方式解释一下,谢谢你的回答

这是我用来写入文件的函数

void text(){
    int e=1;        
    puts("After a sentance press enter to continue or esc to stop");` 
    printf("Enter text now\n");
    FILE *fp;
    fp=fopen("Text.txt","w");
End:while(e==1){
    char txt[100];
    puts(gets(txt),fp);
    if(getche()=='\e')
    e=0;
    goto End;   
    }   //end of while
        fclose(fp);
    }// end of function
新代码

void text(){
    int e=1;        
    puts("After ending a sentance press enter to continue or esc to stop"); 
    printf("Enter text now\n");
    FILE *fp;
    fp=fopen("Text.txt","w");
while(e==1){
    char txt[100];
    fgets(txt,100,stdin);
    fwrite(txt,sizeof(char),sizeof(txt),fp);
    if(getche()=='\e'){
        break;
    }
    else;   
    }   
        fclose(fp);
    }

你的代码有很多问题,但是。。。您的特殊问题是getche读取一个字符,如果它是\e您执行的操作,但如果它是另一个字符,则它将丢失

使用您选择的函数getche和gets,您可以执行以下操作:

while (1)
{
    char c = getche();
    if (c == '\e')
        break;
    txt[0] = c;
    gets(txt+1);
    /* ... */
}

这不会删除第一个字符,但会出现空行,我认为。。我将把它作为练习留给读者。

你真的使用了goto吗?这是个坏习惯。这里很清楚,但仍然…还有,为什么不使用fgets进行输入,使用fprintf写入文件?我尝试使用break;但这并没有打破循环immediately@Tim:break立即中断循环,您的goto不起任何作用,因为您将返回到循环的开头,与没有goto时的位置相同。您的意思是:fprintffp,fgetstxt,100,stdin,%s?没有工作我只需要用esc\e中断循环,因此如果循环继续或中断,我不需要它,我知道我的代码中有很多问题,但我不知道确切地说哪些命令更适合于什么工作。getche是否接受丢失的字母或它在哪里结束?@Tim:它返回读取字符。您正在将它与\e进行比较,但没有存储它。您是对的,第一个字母会因为getche而丢失。我会尝试把你的代码放到我的程序中,谢谢你的帮助。