Tag: scanf

char数组前面的&符号会影响scanf吗? 它合法吗?

当我们通常输入字符串时,我们这样做: #include int main() { char str[256]; scanf(“%s”,str); //Other Operation } 但是,今天,在编程课上,我的一个朋友写了这样的scanf行: scanf(“%s”,&str); 它通过编译,并工作。 问题是,我想知道这是否在C中是“合法的”,还是只是一个未定义的行为?

从C中的文件中读取整数

很长一段时间我一直在努力解决这个问题,我猜这是一个非常愚蠢的noob错误,但我无法弄明白。 所以我试图读取一个文件中的整数,然后在其中执行一些操作,为了问题我只是想在这里输出它: FILE * pFile; int number; pFile = fopen (“myfile.txt”,”r”); if (pFile!=NULL) { fscanf(pFile, “%d”, number); fclose (pFile); } printf(“number: %i”, number); return 0; myfile.txt的内容: 123 但是当我运行它时它并没有读它,而是它说 RUN FAILED (exit value 1, total time: 32ms) 感谢您的帮助 编辑:我忘了提,它作为一个字符串,它读取正确的数字,但我不能对它进行任何操作,如果我将数字类型设置为双倍它工作,但输出一些数百万的随机数。 ..

scanf(“%d”,a)带有“while”语法绕过scanf

如果没有初始化(“mod = 0”),则此代码将进入无限循环。 我无法理解为什么这个代码循环,即使我使用了getchar(); 擦除缓冲区。 当我先键入“1”,然后键入“a”时,会出现无限循环。 任何人都可以帮助我理解这种情况吗? int main() { srand((unsigned)time(NULL)); int mod = 0; int val = 0; do { printf(“\t—————————–\n”); printf(“\t|%5s %5s %5s %5s|\n”, “1.create”, “2.modify”, “3.print”, “4.quit”); printf(“\t|%15s”,”Input command : “); scanf(“%d”, &mod); printf(“\t—————————–\n”); switch (mod){ case 1: random(); val++; break; case 2: if(val != 0) { modify(); break; } case 3: […]

&符号(&)和C中的scanf?

我有以下多项选择题,我无法弄清楚为什么(A)和(C)不正确,任何解释都将不胜感激! 以下问题中唯一正确的答案是(B)。 Which of the following is a correct usage of scanf? (A) int i=0; scanf(“%d”, i); (B) int i=0; int *p=&i; scanf(“%d”, p); (C) char *s=”1234567″; scanf(“%3s”, &s); (D) char c; scanf(“%c”, c);

我需要解释fscanf参数

您好我需要更好地解释fscanf参数。 我有以下文本文件 this is line 1 this is line 2 this is line 3 … 读出我做的 for(int i=0;i<2;++i){ test[255]; fscanf(fp,"%[\n]",test); printf("%s\n",test); } now I get: this is line 1 this is line 1 with "%[^\n]\n" I get this is line 1 this is line 2 现在我根据我的理解将我的陈述分开:%表示读取未格式化(%s会给我一个字符串%c单个字符…)[^ \ n]直到你得到的东西在这种情况下不匹配新队 你能解释一下方括号的function和终止吗? 我阅读了官方解释,但没有完全理解。 扩展1:我的问题。 我知道有更多易于使用的选项来实现我的目标。 但我只是想了解fscanf的语法。 扩展2:当我理解正确的时候 fscanf(fp,”%[^\n]%*c”,test) […]

过滤的scanf导致无限循环

我通过scanf获得了一个程序过滤输入。 我想要只读数字和大字母+空格。 最近我试图做这样的事情,它陷入无限循环,仍然只打印第一个输入。 我知道fgets() ,但我知道这很有用。 我无法找出问题所在。 这是简化的情况; 我是怎么了? #include #include int main() { char str[21]; do { scanf(“%20[0-9A-Z ]”, str); printf(“%s\n”, str); } while(strcmp(“END”, str) != 0); return 0; } 编辑:我忘了提,输入有效,输入:“HELLO”程序卡住…而scanf仅返回1为第一次输入,其他返回0。我也尝试fflush(stdin) ,阅读后…

尽管有0长度的缓冲区和编译器警告,scanf()仍可正常工作。 到底是怎么回事?

我的编译器(clang)显示以下消息: 11:17:warning: format specifies type ‘char *’ but the argument has type ‘char (*)[0]’ [-Wformat] scanf(“%s”, &name); ~~ ^~~~~ 1 warning generated. 从以下代码(问候程序): /* * Program: gretting2.c * Utility: Display a greeting with your name. * Author: Adrián Garro. */ #include int main () { char name[0]; printf(“——————-\n”); printf(“Write your name: \n”); printf(“——————-\n”); scanf(“%s”, &name); […]

逐字节打印4字节整数时出现意外行为

我有这个示例代码,用于将32位整数转换为ip地址。 #include int main() { unsigned int c ; unsigned char* cptr = (unsigned char*)&c ; while(1) { scanf(“%d”,&c) ; printf(“Integer value: %u\n”,c); printf(“%u.%u.%u.%u \n”,*cptr, *(cptr+1), *(cptr+2), *(cptr+3) ); } } 此代码为输入2249459722提供了错误的输出。 但当我更换 scanf(“%d”,&c) ; 通过 scanf(“%u”,&c) ; 输出结果是正确的。 PS :我知道inet_ntop和inet_pton 。 我期待的答案不是建议那些答案。

编译器不会在scanf()上停止输入

这是一个小C代码 #include int main() { char ch=’Y’; while(ch==’Y’) { printf(“\nEnter new value for Y “); scanf(“%c”,&ch); if(ch==’Y’ || ch==’y’) // do some work printf(“Y was selected\n”); } printf(“exiting main”); return 0; } 我第一次输入’Y’作为输入(没有qoutes),循环返回true并第二次进入内部,但这次它没有在scanf()上停止用户输入。(请执行输入为为了清晰起见,’Y’。 输出如下所示: 如此处所示,编译器第二次没有停止输入。 这背后的原因是什么? 提前致谢 !

如果我忘记关闭扫描设备会发生什么?

假设我忘了关闭扫描组的右方括号] 。 那会发生什么? 它会调用未定义的行为吗? 例: char str[] = “Hello! One Two Three”; char s1[50] = {0}, s2[50] = {0}; sscanf(str, “%s %[^h”, s1, s2); /* UB? */ printf(“s1=’%s’ s2=’%s’\n”, s1, s2); 我在编译时收到GCC的警告: source_file.c: In function ‘main’: source_file.c:11:5: warning: no closing ‘]’ for ‘%[‘ format [-Wformat=] sscanf(str, “%s %[^h”, s1, s2); /* UB? */ 和输出为 s1=’Hello!’ […]