c - 让 scanf 在读取换行符时退出?

标签 c scanf

如果我在终端输入5 5,按回车,再按回车,我想退出循环。

int readCoefficents(double complex *c){
    int i = 0;
    double real;
    double img;
    while(scanf("%f %f", &real, &img) == 2)
        c[i++] = real + img * I;


    c[i++] = 1 + 0*I; // most significant coefficient is assumed to be 1
    return i;
}

显然,该代码无法为我完成工作(是的,我知道缓冲区溢出等待发生)。

scanf 不会退出,除非我输入一个字母(或一些非数字、非空白字符串)。如何在读取空行后让 scanf 退出?

最佳答案

使用 fgets 读取控制台输入:

   int res = 2;
   while (res == 2) {
       char buf[100];
       fgets(buf, sizeof(buf), stdin);
       res = sscanf(buf, "%f %f", &real, &img);
       if (res == 2)
           c[i++] = real + img * I;
   }
   c[i++] = 1 + 0*I; // most significant coefficient is assumed to be 1
   return i;

关于c - 让 scanf 在读取换行符时退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723044/

相关文章:

C思维: float vs.整数和浮点表示

c - 重建 makefile 即使它是最新的

c - 将 C 中的局部静态变量翻译成 Common Lisp

C 编程 - 平均

c - scanf() 将换行符留在缓冲区中

使用 memcpy() 将一个文件的内容复制到另一个文件

c - Keil Uvision 5 添加头文件和源文件?

c - 获取二叉树节点

c - 理解 scanf 语法

c - 反转字符串变量,或反转打印字符数组