我有这个任务,我必须读到“?” char然后检查它后面是数字和换行符,换行符,然后是数字,然后再换行换行符。 我检查了“?”后的第一个字符。
if(scanf(“%c”,c)=='\ n')...;
但是只有当第一个是换行符时才有效,而当它不是并且我想要读取数字时,它会切断第一个数字...例如,它不会读取133但只有33个 ... 我该怎么做呢?
我也尝试过将char放回去,但这不起作用
请帮助:)
答案 0 :(得分:1)
getline
优于fgets
(或远距离scanf
)的一个优点是getline
返回成功读取的实际字符数。这允许通过使用返回newline
来最后检查getline
。例如:
while (printf ((nchr = getline (&line, &n, stdin)) != -1)
{
if (line[nchr - 1] = '\n') /* check whether the last character is newline */
line[--nchr] = 0; /* replace the newline with null-termination */
/* while decrementing nchr to new length */
答案 1 :(得分:0)
使用fgets(3),或者更好,getline(3)(如here)阅读整行,然后使用strtol(3)或sscanf(3)解析该行(比如here)
不要忘记仔细阅读您正在使用的每个功能的文档。处理错误案例 - 可能使用perror
然后使用exit
来显示有意义的消息。请注意,scanf
和sscanf
会返回已扫描项目的数量,并且知道%n
,而strtol
可以设置一些结束指针。
请记住,在某些操作系统(例如Linux)上,终端是tty,并且通常由内核进行行缓冲;所以在你按 return 键之前没有任何东西发送到你的程序(你可以在终端上进行原始输入,但这是特定于操作系统的;在Linux上也考虑readline
。)
答案 2 :(得分:0)
this line: if (scanf("%c",c)=='\n') ...; will NEVER work.
scanf returns a value that indicates the number of successful parameter conversions.
suggest:
// note: 'c' must be defined as int, not char
// for several reasons including:
// 1) getchar returns an int
// 2) on some OSs (dos/windows) '\n' is 2 characters long
// 3) if checking for EOF, EOF is defined as an int
if( '\n' == (c = getchar() ) )
{ // then found newline
...
答案 3 :(得分:0)
#include <stdio.h>
int main (void){
int num;
scanf("%*[^?]?");//read till the "?"
while(1==scanf("%d", &num)){
printf("%d\n", num);
}
return 0;
}