我正在尝试使用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
(字符之间有空格)
我希望变量firstNumber
为2
和secondNumber
为2
和str
为string
答案 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)
以下是可行的方法:
- 您可以先解析整个字符串并将其存储到临时缓冲区中。
- 您现在可以使用
strtok()
使用' '(space)
字符对字符串进行标记。或者,您可以使用sscanf()
代替strtok()
。- 对前两个数字使用
醇>atoi()
并阅读最终字符串。
<强>代码强>:
假设存储扫描字符串所需的缓冲区不超过
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