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/46394336/

相关文章:

c++ - 在 C 源文件中包含带有命名空间的 C++ 头文件导致编译错误

c - C 中的 Solaris 时区(在 strftime 上缺少 %z)

c++ - 扫描以空格分隔的数字

c - 为什么我不能使用 'scanf_s' 同时读取字符和数字?

c++ - 读取文本文件并在 C/C++ 中仅获取每行最后一个整数的结果

c - 将文本中的数据获取到数组中

c - 将参数传递给函数指针数组

c - 使用 NPAPI 显示 SWF 文件(在 Xlib 上)

c - 无需多线程套接字的多个连接

c - scanf() 跳过变量