如何动态获取整数输入并让循环在按回车键时终止?
How can I take integer input dynamically and have the loop terminate on pressing enter?
我需要动态获取整数输入,并在用户按下回车键后立即终止。当我将字符作为输入时,我从来没有遇到过任何问题,因为我可以轻松检查换行符并且每个字符都是一个字符。但是在这里,我不能只接受一个字符输入并将其减去“0”,因为当我输入 10 时,字符值是 1 然后是 0。
这是我正在使用的一段代码:
int no;
while (scanf_s(" %d", &no) == 1)
{
printf("%d ", no);
}
这是我用来输入字符的另一段代码,它也适用于单个数字整数:
char no;
while ((no=getchar()) != EOF && no != '\n')
{
printf(" %d ", no - '0');
}
scanf 循环不会在按下 enter 时终止,但它会正确地接受所有输入。而 getchar 循环正确终止但仅存储 1 位整数。
如何让整数输入在用户输入空白行时终止?
您可以使用标准函数 fgets
将输入读入字符数组,然后使用标准函数 strtol
.
提取数字
这是一个演示程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int is_empty( const char *s )
{
return s[strspn( s, " \t" )] == '\n';
}
int main(void)
{
enum { N = 100 };
char line[N];
while ( fgets( line, N, stdin ) && !is_empty( line ) )
{
char *endptr;
for ( const char *p = line; *p != '\n'; p = endptr )
{
int num = strtol( p, &endptr, 10 );
printf( "%d ", num );
}
}
return 0;
}
如果输入以下几行
1
2 3
4 5 6
7 8
9
(最后一行为空,表示用户刚刚按下回车)
那么输出会像
1 2 3 4 5 6 7 8 9
我需要动态获取整数输入,并在用户按下回车键后立即终止。当我将字符作为输入时,我从来没有遇到过任何问题,因为我可以轻松检查换行符并且每个字符都是一个字符。但是在这里,我不能只接受一个字符输入并将其减去“0”,因为当我输入 10 时,字符值是 1 然后是 0。
这是我正在使用的一段代码:
int no;
while (scanf_s(" %d", &no) == 1)
{
printf("%d ", no);
}
这是我用来输入字符的另一段代码,它也适用于单个数字整数:
char no;
while ((no=getchar()) != EOF && no != '\n')
{
printf(" %d ", no - '0');
}
scanf 循环不会在按下 enter 时终止,但它会正确地接受所有输入。而 getchar 循环正确终止但仅存储 1 位整数。
如何让整数输入在用户输入空白行时终止?
您可以使用标准函数 fgets
将输入读入字符数组,然后使用标准函数 strtol
.
这是一个演示程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int is_empty( const char *s )
{
return s[strspn( s, " \t" )] == '\n';
}
int main(void)
{
enum { N = 100 };
char line[N];
while ( fgets( line, N, stdin ) && !is_empty( line ) )
{
char *endptr;
for ( const char *p = line; *p != '\n'; p = endptr )
{
int num = strtol( p, &endptr, 10 );
printf( "%d ", num );
}
}
return 0;
}
如果输入以下几行
1
2 3
4 5 6
7 8
9
(最后一行为空,表示用户刚刚按下回车)
那么输出会像
1 2 3 4 5 6 7 8 9