如何正确处理scanf()

时间:2013-12-07 15:16:46

标签: c stdin scanf

我必须采用以下格式输入

S1 S2 S3

其中S1是字符,S2是S3,S3是整数 例如

 3
 A 123 452
 D 450 53
 B 330 672

(其中'3'代表查询数量) 现在我已经为它编写了以下代码:

 while(i<=Q){
          scanf("%c %d %d",&ch,&index,&num);
          printf("%c %d %d\n",ch,index,num);
          i++;
 }

但是,对于上面显示的三个值,我得到以下输出

 0 755130840
A 123 452

 123 452        

在顶部有一个额外的行,每次都会更改大值(此处为755130840)。

我哪里错了?我甚至尝试单独扫描3个值并在每个扫描语句之前刷新输入流。但是,它也无济于事。

鉴于两个空白行,我相信换行符('\ n')存储在某个变量中。如何处理它?<​​/ p>

2 个答案:

答案 0 :(得分:1)

在scanf中的%c之前添加一个空格。这将允许scanf在读取ch之前跳过任意数量的空格。 scanf空白跳过空格(包括换行符)并读取下一个不是空格的字符。

这是一个代码,这将工作正常。

#include <stdio.h>

int main(void) {
    // your code goes here
    int i =0;
    int Q = 2;
    char ch;
    int index;
    int num;
    while(i<=Q){
          scanf(" %c %d %d",&ch,&index,&num);
          printf("%c %d %d\n",ch,index,num);
          i++;
 }

    return 0;
}

答案 1 :(得分:0)

你想要这样的东西吗?

#include <stdio.h>
#include <stdlib.h>

int main()
{

        int num, count, numone, numtwo;
        char charip;
        printf("Enter numbr of elem:\t");
        scanf("%d", &num);
        if (num < 0)
        {
                printf("Enter positive value!!!!!\n");
                exit (-1);
        }
        count = 0;
        while (count < num)
        {
                getchar();
                scanf ("%c %d %d", &charip, &numone, &numtwo)   ;
                printf("%c %d %d\n", charip, numone, numtwo);
                count++;
        }

        return 0;
}