我有这个代码,它将接受用户输入并使用它做一些事情。
int main ()
{
char key[] = "quit";
char buffer[80];
do {
printf ("CMD> ");
scanf ("%s",buffer);
} while (strcmp (key,buffer) != 0);
printf ("Bye.\n");
return 0;
}
我想整合其他命令。 因此,我要求用户输入类似字符串的命令:
CMD > xxx -a 32
他给了我一个字符串“xxx -a 32”。我怎么能把它们作为论据?
因此我可以使用case来调用具有以下参数的函数:
switch(xxx) { // first arg
case (-a) : // second arg
callAFunction(32); // third arg
break;
}
答案 0 :(得分:0)
正如ameyCU指出的那样,你不能以这种方式使用public class PoiListFragment extends Fragment implements PoiListAdapter.OnOpenMapClickListener,
AdapterView.OnItemClickListener{
private Realm realm;
private PoiListAdapter mAdapter;
private ListView mListView;
private ProgressDialog progressDialog;
public PoiListFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RealmConfiguration realmConfig = new RealmConfiguration.Builder(getActivity()).build();
Realm.deleteRealm(realmConfig);
realm = Realm.getInstance(realmConfig);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_poi_list, container, false);
mListView = (ListView) v.findViewById(R.id.poi_listview);
return v;
}
@Override
public void onResume() {
super.onResume();
initPoisList();
}
private void initPoisList(){
RealmResults<Poi> pois = realm.allObjects(Poi.class);
if(pois == null || pois.size() == 0){
loadPoisFromNet();
return;
}
mAdapter = new PoiListAdapter(getActivity(), pois, true, this);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(this);
Log.d("testt", "size " + mListView.getCount());
}
private void loadPoisFromNet() {
if(!Utils.isNetworkAvailable(getActivity())){
DialogUtils.showOfflineDialogAndFinish(getActivity());
return;
}
showProgressDialog();
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(ApiRequest.getPoiListUrl(), null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
realm.beginTransaction();
try {
realm.createAllFromJson(Poi.class, response.getString("list"));
realm.commitTransaction();
} catch (JSONException e) {
e.printStackTrace();
realm.cancelTransaction();
}
cancelProgressDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
cancelProgressDialog();
}
});
ApiRequest.getInstance(getActivity().getApplicationContext()).addToRequestQueue(jsObjRequest);
}
@Override
public void onOpenMapClick(int position) {
Poi poi = mAdapter.getRealmResults().get(position);
Utils.openMap(getActivity(), poi);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onDestroy() {
super.onDestroy();
realm.close(); // Remember to close Realm when done.
}
private void showProgressDialog(){
progressDialog = DialogUtils.showTransparentProgress(getActivity());
}
private void cancelProgressDialog(){
if (progressDialog != null && progressDialog.isShowing()){
progressDialog.cancel();
}
}
}
因为你需要在编译时让变量名与switch
一起使用。但是,您可以使用switch
来比较用户在运行时输入的字符串参数(strcmp
)。
要将用户输入拆分为多个参数,您可以尝试xxx
,沿着这一行(假设输入正好三个参数,并且还没有错误检查)。
strtok
答案 1 :(得分:0)
您可以使用以下格式执行以下操作: scanf(&#34;%s%c%d&#34;,arg1,&amp; arg2,&amp; arg3); 但是在这里你也没有在arg1中完成存储的字符串,它不是变量,所以你不能把它作为切换命令的参数。尝试将arg1用于此目的