Tag: scanf

scanf – 读取时限制小数位

我知道如何在printf(%xx)中打印值时限制小数和整数。在我的场景中,我想在从控制台读取它时实现它。 那么有什么方法可以在使用scanf函数读取时限制浮点值中的小数位数? 我在下面尝试过,在编译时没有显示任何错误,但总是得到值0 float f1; . . scanf(“%.3f”,&f1); printf(“%3.3f\n”,f1);

而scanf EOF循环行为不当

我是C的初学者,我遇到了一些我无法弄清楚的问题,并且无法在其他线程上找到解决方案。 我正在尝试使用以下代码从键盘输入/ txt文件中读取整数: int grades[MAX_GRADES_LENGTH]={0}, histogram[HISTOGRAM_SIZE]={0}; int maxGradesHistogramBucket=0, median=0, gradesLength=0; double avg=0.0; int grade=0; printf(“Enter grades:\n”); while (scanf(“%d”,&grade) != EOF) { grades[gradesLength]=grade; gradesLength=gradesLength+1; } 我应该在grades []数组中设置这些“等级”并计算循环中数组的长度。 不知怎的,循环行为不端,似乎有些输入对循环没问题,但是对于某些输入(实际上大部分都是),scanf()不会得到EOF,无论它是文件的实际结尾,还是^ D终端中的命令。 我听说scanf()不是读取数据最可靠的方法,但遗憾的是我不能使用其他任何东西,因为我们没有在课堂上学过任何其他方法,所以我们只能在我们的作业中使用scanf()。 我试图用== 1更改!= EOF并且它们都一样。 输入 100 0 90 10 80 20 70 30 60 40 50 例如它工作正常。 但是对于输入: 0 50 100 循环是无限的。 我正在使用macbook pro btw(如果重要的话)。 有任何想法吗?

C中的可变参数scanf

我很好奇是否有可能在C中实现一种可变版本的scanf 。我的意思是如果输入是push (1 2 3) , scanf将能够解析为%s %d %d %d像scanf(“%s (%d)”, string, some_list) 。 它将占用%d所有实例并将它们(按顺序)附加到列表中…… 我在说感觉吗? 编辑:对于指定的输入, string == “push”和some_list == [1, 2, 3] 。

C:将字符串文件读入char * s数组

我有类似的东西(没有间距问题),我正在读取一个文件,其中的字符串由#符号分隔,并尝试将每个字符串读取为char * s数组。 但是,每个包含字符串的char*都是字符串的确切长度。 虽然这是一个小马车。 char * fragments[1000]; char temp[20]; while (i < numFrags) { if (fscanf(fp, "#%15[^#]#", temp) == 1) { char entry[strlen(temp)]; entry = strcpy(entry, temp); fragments[i++] = entry; printf("%d\n", strlen(temp)); } } 思考?

跳过一些scanf介于两者之间

在这个程序中,第二个和第四个scanf跳过,不知道原因。 有人可以告诉原因吗? #include main() { int age; char sex,status,city; printf(“Enter the persons age \n”); scanf(“\n%d”,&age); printf(“enter the gender\n”); scanf(“%c”,&sex); printf(“enter the health status”); scanf(“%c”,&status); printf(“where the person stay city or village”); scanf(“%c”,&city); if(((age>25)&&(age25&&age25&&age<35&&sex=='m'&&status=='b'&&city=='v') printf("60"); else printf("no"); }

fscanf()filter

我有一个包含以下格式数据的文件: 名称WeekDay月份日,年份StartHour:StartMin距离小时:分钟:秒 示例:John Mon 2011年9月5日09:18 5830 0:26:37 我想将其扫描成结构: typedef struct { char name[20]; char week_day[3]; char month[10]; int day; int year; int startHour; int startMin; int distance; int hour; int min; int sec; } List; 我用fscanf(): List listarray[100]; for(int i = 0; ch = fgetc(file) != ‘EOF’; ch = fgetc(file), i++){ if(ch != ‘\0’){ fscanf(file, […]

Scanf声明

#include #include 您好,我想知道为什么这个程序不执行。 好像我一直无法正常执行scanffunction。 我得到的错误是: error:忽略使用属性warn_unused_result声明的scanf的返回值 注意:我知道有一种更有效的方法来编写我当前的程序,但这是不重要的。 我想知道这个错误意味着什么,以及为什么我一直得到它并可能是一个解决方案。 感谢你们。 这是代码: int main (int argc, char *argv[]){ int x; int y; int z; int temp; scanf(“%d”, &x); scanf(“%d”, &y); scanf(“%d”, &z); if (x > y) { temp = x; x = y; y = temp; } if (y > z) { temp = y; y = […]

如何在循环中使用fgets和sscanf作为整数

这里有C的初学者。 我试图运行一个循环,其中字符串和ints输入struct各个字段。 当提示输入“姓氏”时,用户可以在没有其他输入的情况下按Enter键,循环应该结束。 问题是,使用此代码,循环不会结束(姓氏和名字条目请求在同一行上一起运行)并且薪水的值总是出错(0或某些大数字) while (employee_num <= 2) { printf("Enter last name "); fgets(employee[employee_num].last_name, sizeof(employee[employee_num].last_name), stdin); if(strlen(employee[employee_num].last_name) == 0) break; printf("Enter first name "); fgets(employee[employee_num].first_name, sizeof(employee[employee_num].first_name), stdin); printf("Enter title "); fgets(employee[employee_num].title, sizeof(employee[employee_num].title), stdin); printf("Enter salary "); fgets(strng_buffer, 1, stdin); sscanf(strng_buffer, "%d", &employee[employee_num].salary); ++employee_num; getchar(); } 如果我尝试使用此代码,我可以在第一次运行后正确退出循环,但在此之后无法退出(通过在姓氏部分按Enter键 – 也许是\ n我似乎无法清除?): char strng_buffer[16]; while (employee_num <= 5) […]

如何使用scanf输入空格?

使用以下代码: char *name = malloc(sizeof(char) + 256); printf(“What is your name? “); scanf(“%s”, name); printf(“Hello %s. Nice to meet you.\n”, name); 用户可以输入他们的名字但是当他们输入一个像Lucas Aardvark这样的空间的名字时, scanf()切断Lucas之后的所有内容。 如何使scanf()允许空格

scanf()in while循环没有终止?

我有一个while循环,它扫描一组输入整数。 它扫描并打印所有数字,最后带有“…”,然后跳到下一行。 但是,脚本不会:执行while循环并打印TEST。 例如,我输入:3 44 62 1 打印:3 …… 44 … 62 … 1 … 什么时候打印:3 …… 44 … 62 … 1 … 测试 while(scanf(“%d”, &n) != -1) { x[i] = n; i++; printf(“%d”, n); printf(“…\n”); } printf(“TEST”); 我究竟做错了什么?