我正在阅读用空格分隔的数字列表。目前,当我按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;
}
}
答案 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)