C - 如何将字符串作为参数

时间:2015-11-29 12:06:14

标签: c arrays string arguments

我有这个代码,它将接受用户输入并使用它做一些事情。

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;
}

2 个答案:

答案 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用于此目的