使用fgetc(stdin)设置变量

时间:2015-08-18 08:32:55

标签: c stdin fgetc

我正在尝试使用fgetc()中的stdin来设置变量。

到目前为止我的代码

#include <stdio.h>

int main(void){
    int ch;
    int firstNumber,secondNumber;
    char str;

    printf("Enter two numbers and a string: ");
    while((ch=fgetc(stdin))!='\n'){
        while(ch != ' '){
            firstNumber = ch;
            secondNumber = ch;
            string = ch;
            }
        }
    printf("%d %d %s",firstNumber,secondNumber,string);
    return 0;
}

因此,如果我输入2 2 string(字符之间有空格)

我希望变量firstNumber2

secondNumber2

strstring

3 个答案:

答案 0 :(得分:1)

我认为您的解决方案应该是:

#include <stdio.h>

int main(void){
    int ch;
    int firstNumber=0,secondNumber=0,b=0;
    char str;

    printf("Enter two numbers and a string: ");
    while((ch=fgetc(stdin))!='\n'){
        if (ch != ' '){
            if (b==0)
                 firstNumber = firstnumber*10 + ch-'0';
            else
            if (b==1)
                secondNumber = secondnumber*10 + ch-'0';
            else
                str = ch;
        }
        else b++;
    }
    printf("%d %d %c",firstNumber,secondNumber,str);
    return 0;
}

请注意,b会跟踪您分配的内容以及要打印str的内容,实际上只需要一个字符,您需要使用%c。此外,您没有要打印的变量string,只有str

答案 1 :(得分:1)

以下是可行的方法:

  
      
  1. 您可以先解析整个字符串并将其存储到临时缓冲区中。
  2.   
  3. 您现在可以使用strtok()使用' '(space)字符对字符串进行标记。或者,您可以使用sscanf()代替strtok()
  4.   
  5. 对前两个数字使用atoi()并阅读最终字符串。
  6.   

<强>代码

  

假设存储扫描字符串所需的缓冲区不超过100字节。

使用strtok()

的方法
int main()
{
    int ch,i=0;
    int firstNumber,secondNumber;
    const char seperator[2] = " -";
    char buffer[100];
    char *string;

    printf("Enter two numbers and a string: ");
    while((ch=fgetc(stdin))!='\n'){
        buff[i++]=ch;
    }

    /* get the first token as a number */
    firstNumber = atoi(strtok(buff, seperator));
    printf("%d\n",firstNumber);

    /* get the second token as a number*/   
    secondNumber = atoi(strtok(NULL, seperator));    
    printf("%d\n",secondNumber);

    /* get the third token as a string */
    string=strtok(NULL, seperator);
    printf("%s\n",string);

    return(0);
}

使用sscanf()

的方法
printf("Enter two numbers and a string: ");
while((ch=fgetc(stdin))!='\n'){
    buff[i++]=ch;
}

sscanf(buff, "%d %d %s", &firstNumber, &secondNumber, string);  
printf("%d\n%d\n%s\n", firstNumber, secondNumber, string);

答案 2 :(得分:1)

不需要strtok,我们可以在sscanf中实现相同的目标;

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

int main()
{
      int firstNumber,secondNumber;
      char str[100];
      char buffer[100];

      printf("Enter two numbers and a string: ");
      fgets(buffer, 1024, stdin);

      sscanf(buffer, "%d %d %s", &firstNumber, &secondNumber, str);
      printf("%d %d %s\n",firstNumber,secondNumber,str);

      return(0);
}

输出

root@viswesn-vm:/var/lib/lxc# ./a.out 

Enter two numbers and a string: 2 234 king

2 234 king