C - 带有可选int的scanf字符串

Tom*_*cký 0 c string stdin input scanf

我正在研究一个项目,我似乎无法弄清楚如何读取一个并不总是存在的int的字符串.

例如:我有2个变量

int argument = 0;
char instruction[16];
Run Code Online (Sandbox Code Playgroud)

在输入上是:

"string" 57
Run Code Online (Sandbox Code Playgroud)

我想把"字符串"放在指令中,把57放在参数中.我可以这样做

scanf("%s %d", instruction, &argument);
Run Code Online (Sandbox Code Playgroud)

问题是输入可以没有数字,即

"string"
Run Code Online (Sandbox Code Playgroud)

然后我想把"字符串"放在指令中,并将参数保持等于0.但程序期望"字符串"之后的数字,并且在它得到之前不会继续.

当我有两种不同类型的输入时,如何从stdin读取输入?我尝试了几种解决方案,但没有一种解决方案.

谢谢

Sto*_*ica 5

你这样做是因为没有尝试直接解析标准输入.相反,你

  1. 阅读一行输入fgets.
  2. 尝试将该行解析为整数(可能带有sscanf):
    • 如果你成功了,你就有了整数.
    • 否则你有原始字符串.

  • @TomášHorecký手册页是下一站.但请记住,`scanf`和`sscanf`函数系列都返回一个值:成功扫描的项目数.如果没有足够的项目,`scanf`将停止,但`sscanf`将不会. (3认同)