假设我希望标准输入中的项目列表是分开的购买逗号,如下所示:
item1, item2, item3,...,itemn
Run Code Online (Sandbox Code Playgroud)
我还想允许用户在项目和逗号之间发出空格,所以这种输入在我的程序中是合法的:
item1,item2,item3,...,itemn
Run Code Online (Sandbox Code Playgroud)
如果我这样使用scanf:
scanf("%s,%s,%s,%s,...,%s", s1, s2, s3, s4,...,sn);
Run Code Online (Sandbox Code Playgroud)
当没有空格(我测试过它)时它会失败,因为它会将整个输入称为一个字符串.那么如何才能用C标准库函数解决这个问题呢?
小智 8
快速回答永远不会使用scanf来读取用户输入.它用于从文件中读取严格格式化的输入,即使这样也不是很好.至少,您应该读取整行,然后使用sscanf()解析它们,这样您就有机会纠正错误.最好你应该编写自己的解析函数
如果您实际使用的是C++,请研究c ++字符串和流类的使用,这些类更强大,更安全.
你可以看看strtok.首先将行读入缓冲区,然后标记:
const int BUFFERSIZE = 32768;
char buffer[BUFFERSIZE];
fgets(buffer, sizeof(buffer), stdin);
const char* delimiters = " ,\n";
char* p = strtok(buffer, delimiters);
while (p != NULL)
{
printf("%s\n", pch);
p = strtok(NULL, delimiters);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
776 次 |
| 最近记录: |