如何确定c中是否有换行符或数字?

时间:2014-11-29 07:58:04

标签: c char newline

我有这个任务,我必须读到“?” char然后检查它后面是数字和换行符,换行符,然后是数字,然后再换行换行符。 我检查了“?”后的第一个字符。

if(scanf(“%c”,c)=='\ n')...;

但是只有当第一个是换行符时才有效,而当它不是并且我想要读取数字时,它会切断第一个数字...例如,它不会读取133但只有33个 ... 我该怎么做呢?

我也尝试过将char放回去,但这不起作用

请帮助:)

4 个答案:

答案 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来显示有意义的消息。请注意,scanfsscanf会返回已扫描项目的数量,并且知道%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;
}

DEMO