[英]sscanf not setting value of an int
我將數字int傳遞給此方法,但它沒有將int存儲在調用intchange方法的方法中。 有指針嗎?
int intchange(const char *prompt, int number){
char buffer[LINESIZE];
while(1){
printf("%s", prompt);
if(!fgets(buffer,LINESIZE, stdin)){
clearerr(stdin);
return 0;
}
if(sscanf(buffer, "%d", &number) == 1){
/*exit variable */
if(number== -1)
return 0;
else if (number<= 110 && number>= 0)
return 1;
}
}
}
謝謝!
為了使更改對調用者可見,您需要將int
的地址傳遞給intchange()
。 否則的副本int
由調用者提供正被改變,而不是int
為C提供的呼叫者經過值:
int intchange(const char* prompt, int* number)
{
/* snip */
if(sscanf(buffer, "%d", number) == 1){ /* Removed address of operator. */
if(*number == -1) /* Dereference to query int value. */
/* snip */
}
}
調用:
int i;
if (intchange("14", &i))
{
printf("i=%d\n", i);
}
請參閱C甚至有``通過引用傳遞''嗎? 。
使用指針作為輸入參數編號:
int intchange(const char *prompt, int *number){
if(sscanf(buffer, "%d", number) == 1){
if(*number== -1)
return 0;
else if (*number<= 110 && *number>= 0)
當您將參數傳遞給函數時,就是在傳遞它的副本。 因此,在您的情況下, int number
參數只是int number
的副本,該副本在函數中分配給它,然后在函數返回時消失。
解決方案是這樣的:
int intchange(const char *prompt, int* pNumber) {
char buffer[LINESIZE];
while (1) {
printf("%s", prompt);
if (!gets(buffer,LINESIZE, stdin)) {
clearerr(stdin);
return 0;
}
int number;
if(sscanf(buffer, "%d", &number) == 1) {
/*exit variable */
*pNumber = number;
if(number== -1)
return 0;
else if (number<= 110 && number>= 0)
return 1;
}
}
}
在這種情況下,您要傳入一個int
的地址 (在參數pNumber
),可以通過指針對其進行修改。 然后,您可以這樣稱呼它:
int n;
intchange("prompt", &n);
然后n
將具有值輸入。 另請參閱: http : //courses.washington.edu/css342/zander/css332/revisit.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.