我写了一个简单的程序来输入一个数字并返回任意值,当除以它时,将返回3的余数。
我目前正在阅读K&R,它直到第7章才开始教授scanf,所以我尝试使用getchar。它不能工作,但是scanf可以。我做错了什么?
int main()
{
int c, i;
printf("Input an integer: ");
//c = getchar();
scanf("%d", &c);
for (i = 1; i <= 100; i++) {
if ((i % c) == 3) {
printf("%d\n", i);
}
}
return 0;
}可选的附带问题:这里的人们似乎一直建议不要从K&R开始,对于初学者来说,什么可能是更好的选择?
发布于 2020-02-06 04:00:52
这一点:
scanf("%d", &c);正在请求scanf()从标准输入中读取整数值。scanf()函数将根据需要从标准输入中读取尽可能多的字符,然后将它们解析为整数,并将值存储在变量c中(即,在&c指向的地址)。scanf()的返回值还传递正确解析的项数,因此在这种情况下,您应该检查返回值是否为1。
这一点:
c = getchar();正在请求getchar()从标准输入中读取单个字符。getchar()函数将尝试读取一个字符,并在成功的情况下返回该字符(强制转换为int)。如果出现错误或文件结尾,将返回特殊的整数值EOF。getchar()返回int并不意味着函数会像scanf("%d", ...)那样解析输入。实际上,返回值的类型为int,只是因为需要它来区分EOF中的有效字符。
要了解更多信息,请参阅使用man命令的scanf和getchar手册页,例如man scanf。参考手册页对于理解函数的语义很重要。始终阅读手册。或者,你也可以在网上查找:scanf(),getchar()。
如果要使用getchar()扫描单个字符并将其转换为整数,则可以执行以下操作:
#include <stdio.h> // getchar(), puts()
#include <ctypes.h> // isdigit()
int main(void) }
int c;
c = getchar();
if (c == EOF) {
puts("Error!");
return 1;
}
if (!isdigit(c)) {
puts("Character is not a digit!");
return 1;
}
int value = c - '0';
// value now holds the integer corresponding to the digit that was read from input
/* ... */
return 0;
}备注:c - '0'之所以有效,是因为表示数字的字符在ASCII表中的值按顺序递增(从0x30到0x39)。另请参见man ascii。
发布于 2020-02-06 04:05:45
getchar从输入流中读取一个符号,并将其作为内部表示形式或EOF的整数值返回。
因此,要读取一个至少有两位数的数字,您必须多次调用getchar,然后将符号的表示形式转换为相应的整数。
与getchar相反,如果指定了专门用于读取数字的转换格式%d或类似格式,则scanf会尝试将整数作为整数读取
下面是一个演示程序,它展示了如何使用getchar实现您的程序。在程序中,没有检查用户输入的数字是否太大。您可以自己添加这样的检查。
#include <stdio.h>
#include <ctype.h>
int main(void)
{
const unsigned int REMAINDER = 3;
printf( "Input a non-negative integer: " );
unsigned int n = 0;
for ( int c; ( c = getchar() ) != EOF && isdigit( ( unsigned char )c ); )
{
const unsigned int Base = 10;
n = Base * n + ( c - '0' );
}
if ( n > REMAINDER )
{
const unsigned int N = 100;
for ( unsigned int i = 0; i < N; i++ )
{
if ( ( i + 1 ) % n == REMAINDER ) printf( "%u ", i + 1 );
}
putchar( '\n' );
}
return 0;
}例如,程序输出可能如下所示
Input a non-negative integer: 10
3 13 23 33 43 53 63 73 83 93 至于书,读一本你还不熟悉的语言或技术的书总是很困难的。
https://stackoverflow.com/questions/60082917
复制相似问题