如何停止用换行符输入

时间:2019-05-27 14:37:51

标签: c scanf stdio

我正在阅读用空格分隔的数字列表。目前,当我按Ctrl + Z时,循环停止。我只需要知道如何修改循环以在按Enter或遇到换行符('\ n')时终止。

    int numArrayCount = 0;
    int num, count = 0;
    int binaryArray[CAPACITY];
    int numArray[CAPACITY];  

    //takes in positive numbers higher than zero and less than 64. 
    //End output with Ctrl+Z

    while (scanf_s( "%d", &num ) == 1) {
        if (num < 64 && num > 0) {
            binaryArray[ count++ ] = base10ToBinary(num);
            numArray[ numArrayCount++ ] = num;
        }
    }

3 个答案:

答案 0 :(得分:1)

没有直接的方法,因为scanf和朋友只是可怜的人的解析器。只要您使用任意数量的 space 字符(空格,制表符,返回符,换行符和vtab)分隔值,并且这些分隔符是什么无关紧要,scanf就可以了。

如果要处理行,然后可以解析行的内容,则可以使用fgets。不幸的是,您无法反复从字符串中扫描,但是可以使用strtok或更佳的strcspn

构建漂亮的字符串解析器。

其他语言(C ++,Java等)或其他库可能具有更智能的工具。但是C最初是作为一种低级语言而构建的。

答案 1 :(得分:1)

  

如何停止以换行符(?)输入

'\n'之前用getchar()查找scanf( "%d", &num ),因为"%d"安静地消耗了包括'\n'的前导空白。

// concept code
int ch;
while (isspace(c = getchar())) {
  if (c == '\n') return "We are done, \\n"
}
if (c == EOF) return "We are done, EOF"
// put back
ungetc(c, stdin);
if (scanf( "%d", &num ) != 1) return "Non-numeric input";
return "Success";

针对float的完整解决方案here


另一种方法是使用fgets(),然后解析 string 。这种好的方法在长行管理上确实有麻烦,并且如果输入的 line 包含不常见的 null字符,则会失败。

答案 2 :(得分:0)

while (scanf_s(" %d", &num) == 1) {

%d之前插入一个空格,因为它将使scanf函数忽略标准输入中剩下的任何输入,而您将不再需要该getchar()。

enter image description here