【问题标题】:First letter of any word after the first goes missing第一个单词后的任何单词的第一个字母丢失
【发布时间】:2015-11-06 08:38:29
【问题描述】:

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

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

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);
    }

【问题讨论】:

  • 你认真使用goto了吗?这是不好的做法。 这里很清楚,但仍然......
  • 另外,你为什么不使用fgets 输入和fprintf 写入文件?
  • 我尝试使用 break;但它并没有立即打破循环
  • @Tim: break 立即中断循环,您的 goto 什么也不做,因为您要回到循环的开头,无论如何,如果没有 goto,它会回到同一个地方.
  • 你的意思是这样的: fprintf(fp,fgets(txt,100,stdin),"%s"); ?没用

标签: c gets puts fputs


【解决方案1】:

您的代码有很多问题,但是...您的特殊问题是 getche() 读取一个字符,如果它是 \e 你会做某事,但如果它是另一个字符,那么它就丢失了!

使用您选择的函数(getche()gets()),您可以:

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

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

【讨论】:

  • 我只需要用 esc(\e) 中断循环,所以如果循环继续或如果它中断并且我知道我在代码中有很多问题,我不需要它,但我不知道哪些命令更适合什么工作。
  • getche() 是否会接收丢失的字母或它最终会在哪里?
  • @Tim:它返回读取的字符。您将它与\e 进行比较,但不存储它。
  • 你是对的,因为getche,第一个字母丢失了。我会尝试获取您的代码并将其放入我的程序中,感谢您的所有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多