[英]strings and isdigit function
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int digit(s1);
int main()
{char s1[10];
printf("\n Type anything you want:\n");
gets(s1);
printf("The number of digits is:%d",digit(s1));
return 0;
}
int digit(char* s1)
{
int i=0;
while(*s1)
{
i+= !!isdigit(*s1++);
}
return i;
}
這是我的代碼,我需要找出我給出數字的元素。 我將其更改為無效數字,它現在可以完美運行。
isdigit
是在<ctype.h>
中聲明的標准 C function 。 您的 function 與之沖突。 為您的 function 選擇不同的名稱。
這將避免有關沖突類型的編譯器消息,但您的程序中還有其他錯誤需要修復。
您提供的代碼有幾個主要問題。 如果講座說要使用gets()
,請將其扔進垃圾桶,請改用fgets()
。 原因,你可以在這個鏈接中找到:
為什么 get function 如此危險以至於不應該使用?
除此之外,講座似乎甚至沒有為您提供正確傳遞參數或正確傳遞變量 output 值的知識。
我推薦你閱讀一本好的 C 入門書,fe this 。 推薦書籍列表也可以在這里找到:
只關注一個問題,output:
printf("There are %d digits in your string.");
printf()
的這種用法是不正確的。 %d
指定的值應該從哪里來? %d
格式說明符缺少指向 integer 值或int
變量的相應參數,例如:
int a = 10;
printf("a = %d",a);
%d
需要一個匹配的int
類型的參數來實際打印一個值。 否則行為未定義。
這將在所有情況下給出診斷。 永遠不要忽略編譯器警告。
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int count_digits(const char *s1);
int main()
{
char s1[20];
printf("\n Type anything you want:\n");
fgets(s1, sizeof(s1), stdin);
printf("The number of digits is:%d", count_digits(s1));
return 0;
}
int count_digits(const char* s1)
{
int count = 0;
while(*s1)
{
count += !!isdigit(*s1++);
}
return count;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.