新闻  |   论坛  |   博客  |   在线研讨会
eclipse C/C+ CDT中scanf不能debug输入输出的问题
电子禅石 | 2018-03-15 11:02:41    阅读:20014   发布文章


问题:

在使用Eclipse IDE for C/C++ Developers  时候,发现调试scanf 等需要输入数据的时候,无法正常 输入,还老报错。最后查到解决方案,和大家一起分享。


1. 创新思路解决方案:使用文件进行读写代替控制台的读写

c语言和c++通用

FILE *fp = fopen("data.txt", "r+");

使用fscanf(fp, "%d", &x)代替scanf("%d",&x)

使用fprintf(fp,"%d", x)代替printf("%d",x)

记得要fclose(fp)


c++专用

fstream fio("data.txt")

使用fio >> x代替cin >> x

使用fio << x代替cout << x

记得要fio.close();


2. 传统思路解决方案:因为eclipse对c/c++的支持比较晚,所以不能100%通用


c语言和c++都适用

在main()函数的第一行写上如下语句

setvbuf(stdout,NULL,_IONBF,0);//亲测 可以使用。

实际例子:

#include "stdio.h"

int main(void)
{
    setvbuf(stdout,NULL,_IONBF,0);
    printf("hello wrold");

    int ch;
    char cStr[10];
    
   while((ch = getchar()) != EOF)//or while((ch = getchar()) !='\n")
   {
        putchar(ch);
    }
    scanf("%s",cStr);
    printf("%s",cStr);

    printf("hello wrold2");

    return 0;
}


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
电子禅石  2018-03-15 11:28:06 

Setvbuf 函数详解: https://www.cnblogs.com/lichenlong/p/5170059.html 功 能: 把缓冲区与流相关   用 法: int setvbuf(FILE *stream, char *buf, int type, unsigned size);   参数:stream :指向流的指针 ;   buf : 期望缓冲区的地址;   type : 期望缓冲区的类型:   _IOFBF(满缓冲):当缓冲区为空时,从流读入数据。或者当缓冲区满时,向流写入数 据。   _IOLBF(行缓冲):每次从流中读入一行数据或向流中写入一行数据。   _IONBF(无缓冲):直接从流中读入数据或直接向流中写入数据,而没有缓冲区。   size : 缓冲区内字节的数量。

属于自己的技术积累分享,成为嵌入式系统研发高手。
推荐文章
最近访客