c - c 只接受使用scanf輸入的數值

  显示原文与译文双语对照的内容
148 2

如何確保用戶只輸入數字值而不是字母數字或者其他字元?另外,為incorrent輸入插入錯誤消息的內容?

#include<stdio.h>
int main()
{
 int a, b, c;
 printf("Enter first number to addn");
 scanf("%d",&a);
 printf("Enter second number to addn");
 scanf("%d",&b);
 c = a + b;
 printf("Sum of entered numbers = %dn",c);
 return 0;
}
时间:原作者:0个回答

146 2

如果你真的想處理用戶輸入可能是敵對的收費使用一個單獨的函數來獲取號碼。

允許
- 前導空格:"123"
- 尾隨空格:"123"
- 前導零:"0000000000000000000000000000000000123"
- 在輸入錯誤后重新掃描。
捕獲下列錯誤
- 無輸入:""
- 數字後面的附加文本:"123 abc""
- 數字之前的文本:abc 123"
- 拆分編號:"123 456"
- 溢出/下溢:"12345678901234567890""
- 其他:--123""
輸入無效輸入提示。

#include <errno.h>
#include <stdio.h>
#include <stddef.h>
int GetInteger(const char *prompt, int *i) {
 int Invalid = 0;
 int EndIndex;
 char buffer[100];
 do {
 if (Invalid)
 fputs("Invalid input, try again.n", stdout);
 Invalid = 1;
 fputs(prompt, stdout);
 if (NULL == fgets(buffer, sizeof(buffer), stdin))
 return 1;
 errno = 0;
 } while ((1!= sscanf(buffer,"%d %n", i, &EndIndex)) || buffer[EndIndex] || errno);
 return 0;
}
int main() {
 int a, b, c;
 if (GetInteger("Enter first number to addn", &a)) {
 ;//End of file or I/O error (rare)
 }
 if (GetInteger("Enter second number to addn", &b)) {
 ;//End of file or I/O error (rare)
 }
 c = a + b;
 printf("Sum of entered numbers = %dn",c);
 return 0;
}

,你不應該printf("Enter first number to addn")使用 fputs() 。如果字元串中有 %,請考慮將會發生什麼。

原作者:
63 3

請閱讀 的手冊頁。你需要檢查返回值。如果能夠匹配數字,則應返回 1.

原作者:
...