[英]Using scanf to scan multiple chars and ints at once
問題似乎相對直接和基本。 好像以前有人問過,但是我無法使用搜索引擎找到任何東西。 我幾乎需要一個用戶輸入多個變量,然后將其存儲在一次掃描中。 我是C語言的新手,所以不確定為什么它不起作用。 我知道這是新手,但是不確定C的新手。
用戶幾乎會輸入類似“ * 2 4”的內容,但是由於某種原因,變量值在下一個方法中永遠不會更改。
即使我把printf("Values are %d and %d", &start, &end);
掃描后立即,這些值仍保持不變。
char symb;
int start, end;
printf("Enter a symbol, a start point, and an end point : ");
scanf("%c %d %d", &symb, &start, &end);
do_function(symb, start, end);
您可以通過檢查其返回值來檢查scanf()
成功; 如果未返回3
,則由於未掃描值,因此您的代碼將無法繼續。
在"%c"
之前添加空間以消耗前面的空白並檢查scanf()
結果。
if (scanf(" %c %d %d", &symb, &start, &end) != 3) {
puts("Bad input");
exit (-1);
}
scanf("%c %d %d", &symb, &start, &end)
任何 char
並將其保存到symb
。 通常這是上一行的'\\n'
。 然后,嘗試通過'*'
停止讀取數字。
更好的方法是讀取整行,然后對其進行掃描。
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_IOErrorOrEOF();
if (sscanf(buf, " %c %d %d", &symb, &start, &end) != 3) {
puts("Bad input");
exit (-1);
}
do_function(symb, start, end);
注意: " %c %d %d"
可能是" %c%d%d"
因為除"%c"
, "%n"
和"%["
以外的所有說明符都使用前導空格,即使沒有前導" "
。
弄清楚我的打印方法有問題(在不需要時使用了&號)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.