C 如何使用换行符停止输入

C 如何使用换行符停止输入,c,scanf,stdio,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

我正在读一个由空格分隔的数字列表。当前,当我按下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;
        }
    }
int numaraycount=0;
int num,count=0;
int二进制数组[容量];
国际努马拉[容量];
//接受大于零小于64的正数。
//使用Ctrl+Z结束输出
而(scanf_s(“%d”,&num)==1){
if(num<64&&num>0){
二进制数组[count++]=base10ToBinary(num);
Numaray[numArrayCount++]=num;
}
}

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

如果您想处理行,然后可以解析行的内容,
fgets
是一种方法。不幸的是,您不能重复扫描字符串,但可以使用
strtok
或更好的
strcspn


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

没有直接的方法,因为
scanf
和friends只是一个穷人的解析器。只要您的值用任意数量的空格字符(空格、制表符、回车、换行符和vtab)分隔,并且这些分隔符是什么并不重要,
scanf
就可以了

while (scanf_s(" %d", &num) == 1) {
如果您想处理行,然后可以解析行的内容,
fgets
是一种方法。不幸的是,您不能重复扫描字符串,但可以使用
strtok
或更好的
strcspn

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

while (scanf_s(" %d", &num) == 1) {
%d
之前插入一个空格,因为它将使scanf函数忽略stdin中剩余的输入,您将不再需要该getchar()

%d
之前插入一个空格,因为它将使scanf函数忽略stdin中剩余的输入,您将不再需要该getchar()

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

scanf(“%d”,&num)
之前使用
getchar()
查找
'\n'
,因为
%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";
浮动的完整解决方案


另一种方法是使用
fgets()
,然后修剪字符串。这种好的方法在长行管理方面确实存在问题,如果输入行包含不常见的空字符,则会失败

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

scanf(“%d”,&num)
之前使用
getchar()
查找
'\n'
,因为
%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";
浮动的完整解决方案



另一种方法是使用
fgets()
,然后修剪字符串。这种好方法在长行管理方面确实存在问题,如果输入行包含不常见的空字符,则会失败。

使用
fgets
,然后使用
sscanf
float
的解决方案。关键是在
scanf(“%d”…)
查找
'\n'
之前读取潜在的前导空格。使用
fgets
后跟
sscanf
浮点的解决方案。关键是在
scanf(“%d”…)
查找
'\n'
之前读取潜在的前导空格。
%
之前的空格只会导致函数过滤掉空格,而不会过滤掉以前无法转换的字符,例如
'a'
。但是大多数格式说明符(除了明显的
%c
%[]
之外)都会过滤空白,所以这里不需要。编辑显示您在每个数字后面键入
Enter
。但是问题是,当找到第一个
输入
'\n'
时,如何终止。是的,这是真的,我完全误读了它@风向标是正确的。
%
之前的空格只会导致函数过滤掉空白,而不会过滤掉以前无法转换的字符,例如
'a'
。但是大多数格式说明符(除了明显的
%c
%[]
之外)都会过滤空白,所以这里不需要。编辑显示您在每个数字后面键入
Enter
。但是问题是,当找到第一个
输入
'\n'
时,如何终止。是的,这是真的,我完全误读了它@风向标是正确的。