我是編程新手,所以這可能是一個簡單的答案。
我最近剛剛開始學習 c 并且想知道如何在我的程式中排除字符作為值輸入。
有沒有辦法通過 scanf 功能將輸入識別為字符,然后撰寫 printf 以顯示無效值訊息?它會更多地識別字符然后列印我所關心的訊息。
編輯:如所問,以下是我的程式代碼,該程式首先讀取五個數字(每個數字在 1 到 30 之間)。對于讀取的每個數字,程式應列印一行包含該數量的相鄰星號。
為此,如果我輸入一個數值,它會導致程式停止作業。因此,如果我可以添加一種在輸入時創建“再試一次”訊息或類似訊息的方法,這將阻止它出現錯誤。
#include <stdio.h>
int main(void)
{
int number1 = 0; int counter;
int sentinelcount = 1;
printf("Please enter 5 values, between 1 and 30");
while (sentinelcount <= 5) {
printf("\n\nEnter number: \n"); /*prompt*/
scanf_s("%d", &number1); /*read an interger*/
sentinelcount ;
if (number1 < 1 || number1 > 30)
{
sentinelcount--;
printf("\nWrong Value\n");
}
if (number1 < 1 || number1 > 30)
{
printf("Enter within correct value range: 1 - 30! ");
}
else if (number1 >= 1 || number1 <= 30)
{
printf("Number of asterisks:\n");
for (counter = 1; counter <= number1;
counter )
{
printf("*");
}
}
}
return 0;
謝謝,
uj5u.com熱心網友回復:
如何阻止字符被輸入到程式中
如果沒有阻止用戶輸入非數字或有限鍵盤的魔術手,更好的方法不是停止輸入字符,而是接受它們作為輸入,然后檢測無效輸入。
我建議使用無效輸入并提醒用戶該問題。
一個很好的第一次嘗試讀取線輸入到一個字串用fgets()。
測驗輸入、轉換成功、額外垃圾和范圍。
char buf[80];
if (fgets(buf, sizeof buf, stdin)) { // TBD deal with lines longer than 79
如果某行被讀取,以處理它strtol(),sscanf()等使用"%n",以檢測掃描結束處的位置。執行錯誤檢查。
int num;
int n;
// If an integer was parsed with no trailing junk and in range ...
if (sscanf(buf, "M %n", &num, &n) == 1 && buf[n] == 0 &&
(num >= 1 && num <= 30)) {
Oh_Happy_Day(); // TBD code
} else {
Invalid_input(): // TBD code
}
uj5u.com熱心網友回復:
如果你想從你的代碼中排除字符,你可以使用這樣的東西:
unsigned long long answer1,answer2,answer3,c;
scanf("%*[^0123456789]%llu%*[^0123456789]%llu%*[^0123456789]%llu",&answer1,&answer2,&answer3);
printf("%lld %lld %lld",answer1,answer2,answer3);
return 0;
如果你想列印字符,你不應該像這樣掃描字符: scanf("%d"&a) 而你用 this:scanf("%c",&a) 掃描它們,同樣的點會列印出來。但是這樣你一次只能掃描一個字符,如果你想掃描更多,請在 scanf 和 printf 中使用更多的 %c
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367988.html
標籤:C
上一篇:為什么我的代碼呼叫一個函式兩次?
